Skip to content

Commit

Permalink
HHH-17377 - Migrate to JPA 3.2
Browse files Browse the repository at this point in the history
  • Loading branch information
sebersole committed Nov 17, 2023
1 parent 2b8b69b commit 6351fe4
Show file tree
Hide file tree
Showing 29 changed files with 395 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public static AccessType fromExternalName(@Nullable String externalName) {
return null;
}
for ( AccessType accessType : AccessType.values() ) {
if ( accessType.getExternalName().equalsIgnoreCase( externalName ) ) {
if ( accessType.getExternalName().equals( externalName ) ) {
return accessType;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,39 @@ default SqmPath<?> resolvePathPart(String name, boolean isTerminal, SqmCreationS
throw new IllegalStateException( "Discriminator cannot be de-referenced" );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default SqmTreatedPath treatAs(Class treatJavaType) throws PathException {
throw new UnsupportedMappingException( "Cannot apply TREAT operator to discriminator path" );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default SqmTreatedPath treatAs(EntityDomainType treatTarget) throws PathException {
throw new UnsupportedMappingException( "Cannot apply TREAT operator to discriminator path" );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default SqmTreatedPath treatAs(Class treatJavaType, String alias) throws PathException {
throw new UnsupportedMappingException( "Cannot apply TREAT operator to discriminator path" );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default SqmTreatedPath treatAs(EntityDomainType treatTarget, String alias) throws PathException {
throw new UnsupportedMappingException( "Cannot apply TREAT operator to discriminator path" );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default SqmTreatedPath treatAs(Class treatJavaType, String alias, boolean fetch) throws PathException {
throw new UnsupportedMappingException( "Cannot apply TREAT operator to discriminator path" );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default SqmTreatedPath treatAs(EntityDomainType treatTarget, String alias, boolean fetch) throws PathException {
throw new UnsupportedMappingException( "Cannot apply TREAT operator to discriminator path" );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,4 @@ public <X> X accept(SemanticQueryWalker<X> walker) {
public AnyDiscriminatorSqmPathSource<T> getExpressible() {
return (AnyDiscriminatorSqmPathSource<T>) getNodeType();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import org.hibernate.query.sqm.tree.cte.SqmCteStatement;
import org.hibernate.query.sqm.tree.domain.SqmPath;
import org.hibernate.query.sqm.tree.domain.SqmPolymorphicRootDescriptor;
import org.hibernate.query.sqm.tree.from.SqmAttributeJoin;
import org.hibernate.query.sqm.tree.from.SqmCteJoin;
import org.hibernate.query.sqm.tree.from.SqmEntityJoin;
import org.hibernate.query.sqm.tree.from.SqmFrom;
Expand Down Expand Up @@ -279,7 +278,7 @@ public void consumeIdentifier(String identifier, boolean isTerminal, boolean all
public void consumeTreat(String entityName, boolean isTerminal) {
if ( isTerminal ) {
currentPath = fetch
? ( (SqmAttributeJoin<?, ?>) currentPath ).treatAs( treatTarget( entityName ), alias, true )
? currentPath.treatAs( treatTarget( entityName ), alias, true )
: currentPath.treatAs( treatTarget( entityName ), alias );
}
else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
*/
package org.hibernate.query.sqm;

import org.hibernate.HibernateException;

import org.checkerframework.checker.nullness.qual.Nullable;

/**
* Indicates a problem with a TREAT usage
*
* @author Steve Ebersole
*/
public class TreatException extends HibernateException {
public TreatException(String message) {
super( message );
}

public TreatException(String message, @Nullable Throwable cause) {
super( message, cause );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ public <X, T extends X> SqmPath<T> treat(Path<X> path, Class<T> type) {
@Override
public <X, T extends X> SqmRoot<T> treat(Root<X> root, Class<T> type) {
//noinspection unchecked
return (SqmTreatedRoot<X,T>) ( (SqmRoot<X>) root ).treatAs( type );
return (SqmTreatedRoot) ( (SqmRoot<X>) root ).treatAs( type );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,15 @@ public abstract class AbstractSqmAttributeJoin<L, R>

private final boolean fetched;

@SuppressWarnings({ "rawtypes", "unchecked" })
public AbstractSqmAttributeJoin(
SqmFrom<?, L> lhs,
SqmJoinable joinedNavigable,
String alias,
SqmJoinType joinType,
boolean fetched,
NodeBuilder nodeBuilder) {
//noinspection StringEquality
this(
lhs,
joinedNavigable.createNavigablePath( lhs, alias ),
Expand All @@ -53,6 +55,7 @@ public AbstractSqmAttributeJoin(
);
}

@SuppressWarnings("rawtypes")
protected AbstractSqmAttributeJoin(
SqmFrom<?, L> lhs,
NavigablePath navigablePath,
Expand Down Expand Up @@ -136,5 +139,11 @@ public JoinType getJoinType() {
@Override
public abstract <S extends R> SqmTreatedAttributeJoin<L, R, S> treatAs(EntityDomainType<S> treatTarget, String alias);

@Override
public abstract <S extends R> SqmTreatedAttributeJoin<L, R, S> treatAs(Class<S> treatJavaType, String alias, boolean fetched);

@Override
public abstract <S extends R> SqmTreatedAttributeJoin<L, R, S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetched);


}
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,36 @@ private <E> SqmSetJoin<T, E> buildSetJoin(
);
}

@Override
public <S extends T> SqmTreatedFrom<O,T,S> treatAs(Class<S> treatJavaType) {
return (SqmTreatedFrom<O,T,S>) super.treatAs( treatJavaType );
}

@Override
public <S extends T> SqmTreatedFrom<O,T,S> treatAs(EntityDomainType<S> treatTarget) {
return (SqmTreatedFrom<O,T,S>) super.treatAs( treatTarget );
}

@Override
public <S extends T> SqmTreatedFrom<O,T,S> treatAs(Class<S> treatJavaType, String alias) {
return (SqmTreatedFrom<O,T,S>) super.treatAs( treatJavaType, alias );
}

@Override
public <S extends T> SqmTreatedFrom<O,T,S> treatAs(EntityDomainType<S> treatTarget, String alias) {
return (SqmTreatedFrom<O,T,S>) super.treatAs( treatTarget, alias );
}

@Override
public <S extends T> SqmTreatedFrom<O,T,S> treatAs(Class<S> treatJavaType, String alias, boolean fetch) {
return (SqmTreatedFrom<O,T,S>) super.treatAs( treatJavaType, alias, fetch );
}

@Override
public <S extends T> SqmTreatedFrom<O,T,S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetch) {
return (SqmTreatedFrom<O,T,S>) super.treatAs( treatTarget, alias, fetch );
}

@Override
public void appendHqlString(StringBuilder sb) {
if ( alias == null ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ public <S extends R> SqmTreatedJoin<L, R, S> treatAs(EntityDomainType<S> treatTa
@Override
public abstract <S extends R> SqmTreatedJoin<L, R, S> treatAs(EntityDomainType<S> treatTarget, String alias);

@Override
public abstract <S extends R> SqmTreatedJoin<L, R, S> treatAs(Class<S> treatJavaType, String alias, boolean fetched);

@Override
public abstract <S extends R> SqmTreatedJoin<L, R, S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetched);

@Override
public SqmFrom<?, L> getLhs() {
//noinspection unchecked
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,36 @@ protected <S extends T> SqmTreatedPath<T, S> getTreatedPath(EntityDomainType<S>
return path;
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(Class<S> treatJavaType) {
return treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ) );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget) {
return getTreatedPath( treatTarget );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(Class<S> treatJavaType, String alias) {
return treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ) );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget, String alias) {
return getTreatedPath( treatTarget );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(Class<S> treatJavaType, String alias, boolean fetch) {
return treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ) );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetch) {
return null;
}

/**
* Utility that checks if this path's parent navigable path is compatible with the specified SQM parent,
* and if not creates a copy of the navigable path with the correct parent.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,33 @@ public <X> X accept(SemanticQueryWalker<X> walker) {
return walker.visitNonAggregatedCompositeValuedPath( this );
}

@Override
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(Class<S> treatJavaType) throws PathException {
throw new FunctionArgumentException( "Non-aggregate composite paths cannot be TREAT-ed" );
}

@Override
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(EntityDomainType<S> treatTarget) throws PathException {
throw new FunctionArgumentException( "Non-aggregate composite paths cannot be TREAT-ed" );
}

@Override
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(Class<S> treatJavaType, String alias) {
throw new FunctionArgumentException( "Non-aggregate composite paths cannot be TREAT-ed" );
}

@Override
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(EntityDomainType<S> treatTarget, String alias) {
throw new FunctionArgumentException( "Non-aggregate composite paths cannot be TREAT-ed" );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(Class<S> treatJavaType, String alias, boolean fetch) {
throw new FunctionArgumentException( "Non-aggregate composite paths cannot be TREAT-ed" );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget) throws PathException {
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetch) {
throw new FunctionArgumentException( "Non-aggregate composite paths cannot be TREAT-ed" );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,12 @@ public <S extends T> SqmTreatedFrom<T, T, S> treatAs(EntityDomainType<S> treatTa
}

@Override
public <S extends T> SqmTreatedFrom<T, T, S> treatAs(Class<S> treatJavaType, String alias) {
public <S extends T> SqmTreatedRoot treatAs(Class<S> treatJavaType, String alias) {
throw new UnsupportedOperationException( "Derived roots can not be treated" );
}

@Override
public <S extends T> SqmTreatedFrom<T, T, S> treatAs(EntityDomainType<S> treatTarget, String alias) {
public <S extends T> SqmTreatedRoot treatAs(EntityDomainType<S> treatTarget, String alias) {
throw new UnsupportedOperationException( "Derived roots can not be treated" );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,32 @@ public SqmPathSource<T> getNodeType() {

@Override
public <S extends T> SqmTreatedSimplePath<T,S> treatAs(Class<S> treatJavaType) throws PathException {
return (SqmTreatedSimplePath<T, S>) treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ) );
return treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ) );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget) throws PathException {
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(EntityDomainType<S> treatTarget) throws PathException {
return (SqmTreatedSimplePath<T, S>) getTreatedPath( treatTarget );
}

@Override
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(Class<S> treatJavaType, String alias) {
return treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ), alias );
}

@Override
public <S extends T> SqmTreatedSimplePath<T, S> treatAs(EntityDomainType<S> treatTarget, String alias) {
return (SqmTreatedSimplePath<T, S>) getTreatedPath( treatTarget );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(Class<S> treatJavaType, String alias, boolean fetch) {
final EntityDomainType<S> treatEntityType = nodeBuilder().getDomainModel().entity( treatJavaType );
return treatAs( treatEntityType, alias, fetch );
}

@Override
public <S extends T> SqmTreatedPath<T, S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetch) {
return getTreatedPath( treatTarget );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,20 @@ public <S extends V> SqmTreatedMapJoin<L, K, V, S> treatAs(EntityDomainType<S> t
return treat;
}

@Override
public <S extends V> SqmTreatedMapJoin<L, K, V, S> treatAs(Class<S> treatJavaType, String alias, boolean fetched) {
return treatAs( nodeBuilder().getDomainModel().entity( treatJavaType ), alias, fetched );
}

@Override
public <S extends V> SqmTreatedMapJoin<L, K, V, S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetched) {
final SqmTreatedMapJoin<L, K, V, S> treat = findTreat( treatTarget, alias );
if ( treat == null ) {
return addTreat( new SqmTreatedMapJoin<>( this, treatTarget, alias ) );
}
return treat;
}

@Override
public SqmMapJoin<L, K, V> makeCopy(SqmCreationProcessingState creationProcessingState) {
return new SqmMapJoin<>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,14 @@ default JavaType<T> getJavaTypeDescriptor() {
@Override
<S extends T> SqmTreatedPath<T,S> treatAs(EntityDomainType<S> treatTarget);

<S extends T> SqmTreatedPath<T,S> treatAs(Class<S> treatJavaType, String alias);

<S extends T> SqmTreatedPath<T,S> treatAs(EntityDomainType<S> treatTarget, String alias);

<S extends T> SqmTreatedPath<T,S> treatAs(Class<S> treatJavaType, String alias, boolean fetch);

<S extends T> SqmTreatedPath<T,S> treatAs(EntityDomainType<S> treatTarget, String alias, boolean fetch);

default SqmRoot<?> findRoot() {
final SqmPath<?> lhs = getLhs();
if ( lhs != null ) {
Expand Down

0 comments on commit 6351fe4

Please sign in to comment.