Skip to content

Commit 7bae44e

Browse files
committed
HHH-19493 add HCB.id(), HCB.version(), and JpaFrom.id()
1 parent ef1150e commit 7bae44e

File tree

11 files changed

+137
-14
lines changed

11 files changed

+137
-14
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityVersionMapping.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public interface EntityVersionMapping extends BasicValuedModelPart {
1717

1818
String VERSION_ROLE_NAME = "{version}";
1919

20+
static boolean matchesRoleName(String name) {
21+
return VERSION_ROLE_NAME.equals( name );
22+
}
23+
2024
/**
2125
* The attribute marked as the version
2226
*/

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AbstractIdentifiableType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ public <Y> SingularPersistentAttribute<? super J, Y> getVersion(Class<Y> javaTyp
261261
}
262262

263263
@Override
264-
public SingularPersistentAttribute<? super J, ?> findVersionAttribute() {
264+
public SqmSingularPersistentAttribute<? super J, ?> findVersionAttribute() {
265265
if ( versionAttribute != null ) {
266266
return versionAttribute;
267267
}

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/EntityTypeImpl.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.hibernate.metamodel.mapping.DiscriminatorType;
1818
import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping;
1919
import org.hibernate.metamodel.mapping.EntityIdentifierMapping;
20+
import org.hibernate.metamodel.mapping.EntityVersionMapping;
2021
import org.hibernate.metamodel.model.domain.IdentifiableDomainType;
2122
import org.hibernate.metamodel.model.domain.JpaMetamodel;
2223
import org.hibernate.metamodel.model.domain.PersistentAttribute;
@@ -27,7 +28,6 @@
2728
import org.hibernate.query.sqm.tree.domain.SqmManagedDomainType;
2829
import org.hibernate.query.sqm.tree.domain.SqmPath;
2930
import org.hibernate.query.sqm.tree.domain.SqmPersistentAttribute;
30-
import org.hibernate.query.sqm.tree.domain.SqmSingularPersistentAttribute;
3131
import org.hibernate.query.sqm.tree.domain.SqmEntityDomainType;
3232
import org.hibernate.type.descriptor.java.JavaType;
3333

@@ -156,6 +156,9 @@ public SqmPathSource<?> findSubPathSource(String name) {
156156
else if ( EntityIdentifierMapping.matchesRoleName( name ) ) {
157157
return hasSingleIdAttribute() ? findIdAttribute() : getIdentifierDescriptor();
158158
}
159+
else if ( EntityVersionMapping.matchesRoleName( name ) ) {
160+
return hasVersionAttribute() ? findVersionAttribute() : null;
161+
}
159162
else if ( EntityDiscriminatorMapping.matchesRoleName( name ) ) {
160163
return discriminatorPathSource;
161164
}
@@ -164,11 +167,6 @@ else if ( EntityDiscriminatorMapping.matchesRoleName( name ) ) {
164167
}
165168
}
166169

167-
@Override
168-
public SqmSingularPersistentAttribute<? super J, ?> findIdAttribute() {
169-
return super.findIdAttribute();
170-
}
171-
172170
@Override
173171
public SqmPathSource<?> getIdentifierDescriptor() {
174172
return super.getIdentifierDescriptor();

hibernate-core/src/main/java/org/hibernate/query/criteria/HibernateCriteriaBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,11 @@ default <T> JpaSubQuery<T> except(Subquery<? extends T> query1, Subquery<?>... q
352352
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
353353
// Paths
354354

355-
<P, F> JpaExpression<F> fk(Path<P> path);
355+
JpaExpression<?> id(Path<?> path);
356+
357+
JpaExpression<?> version(Path<?> path);
358+
359+
JpaExpression<?> fk(Path<?> path);
356360

357361
@Override
358362
<X, T extends X> JpaPath<T> treat(Path<X> path, Class<T> type);

hibernate-core/src/main/java/org/hibernate/query/criteria/JpaFrom.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,4 +324,7 @@ default <X> JpaJoin<?, X> join(JpaCteCriteria<X> cte, org.hibernate.query.common
324324

325325
@Override
326326
<S extends T> JpaTreatedFrom<O,T,S> treatAs(EntityDomainType<S> treatJavaType);
327+
328+
@Incubating
329+
JpaExpression<?> id();
327330
}

hibernate-core/src/main/java/org/hibernate/query/criteria/spi/HibernateCriteriaBuilderDelegate.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ public <N, T extends Temporal> JpaExpression<N> extract(TemporalField<N, T> fiel
335335
}
336336

337337
@Override
338-
public <P, F> JpaExpression<F> fk(Path<P> path) {
338+
public JpaExpression<?> fk(Path<?> path) {
339339
return criteriaBuilder.fk( path );
340340
}
341341

@@ -799,6 +799,16 @@ public JpaFunction<Instant> currentInstant() {
799799
return criteriaBuilder.currentInstant();
800800
}
801801

802+
@Override
803+
public JpaExpression<?> id(Path<?> path) {
804+
return criteriaBuilder.id( path );
805+
}
806+
807+
@Override
808+
public JpaExpression<?> version(Path<?> path) {
809+
return criteriaBuilder.version( path );
810+
}
811+
802812
@Override
803813
public <T> JpaFunction<T> function(String name, Class<T> type, Expression<?>... args) {
804814
return criteriaBuilder.function( name, type, args );

hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3472,7 +3472,8 @@ public SqmPath<?> visitEntityIdReference(HqlParser.EntityIdReferenceContext ctx)
34723472
return sqmPath.get( identifierDescriptor.getPathName(), true );
34733473
}
34743474
else if ( sqmPath instanceof SqmAnyValuedSimplePath<?> ) {
3475-
return sqmPath.resolvePathPart( AnyKeyPart.KEY_NAME, true, processingStateStack.getCurrent().getCreationState() );
3475+
return sqmPath.resolvePathPart( AnyKeyPart.KEY_NAME, true,
3476+
processingStateStack.getCurrent().getCreationState() );
34763477
}
34773478
else {
34783479
throw new FunctionArgumentException( "Argument '" + sqmPath.getNavigablePath()

hibernate-core/src/main/java/org/hibernate/query/sqm/NodeBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,13 @@ <T> SqmJsonValueExpression<T> jsonValue(
976976
SqmPredicate wrap(Expression<Boolean>... expressions);
977977

978978
@Override
979-
<P, F> SqmExpression<F> fk(Path<P> path);
979+
SqmExpression<?> fk(Path<?> path);
980+
981+
@Override
982+
SqmExpression<?> id(Path<?> path);
983+
984+
@Override
985+
SqmExpression<?> version(Path<?> path);
980986

981987
@Override
982988
<X, T extends X> SqmPath<T> treat(Path<X> path, Class<T> type);

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/SqmCriteriaNodeBuilder.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import org.hibernate.internal.util.ReflectHelper;
4444
import org.hibernate.internal.util.StringHelper;
4545
import org.hibernate.jpa.spi.JpaCompliance;
46+
import org.hibernate.metamodel.mapping.EntityIdentifierMapping;
47+
import org.hibernate.metamodel.mapping.EntityVersionMapping;
4648
import org.hibernate.metamodel.model.domain.DomainType;
4749
import org.hibernate.metamodel.model.domain.JpaMetamodel;
4850
import org.hibernate.metamodel.model.domain.PersistentAttribute;
@@ -602,8 +604,8 @@ public <T extends HibernateCriteriaBuilder> T unwrap(Class<T> clazz) {
602604
}
603605

604606
@Override
605-
public <P, F> SqmExpression<F> fk(Path<P> path) {
606-
final SqmPath<P> sqmPath = (SqmPath<P>) path;
607+
public SqmPath<?> fk(Path<?> path) {
608+
final SqmPath<?> sqmPath = (SqmPath<?>) path;
607609
final SqmPathSource<?> toOneReference = sqmPath.getReferencedPathSource();
608610
final boolean validToOneRef =
609611
toOneReference.getBindableType() == Bindable.BindableType.SINGULAR_ATTRIBUTE
@@ -617,7 +619,6 @@ public <P, F> SqmExpression<F> fk(Path<P> path) {
617619
)
618620
);
619621
}
620-
621622
return new SqmFkExpression<>( sqmPath );
622623
}
623624

@@ -2016,6 +2017,16 @@ public JpaExpression<LocalTime> localTime() {
20162017
);
20172018
}
20182019

2020+
@Override
2021+
public SqmPath<?> id(Path<?> path) {
2022+
return ((SqmPath<?>) path).get( EntityIdentifierMapping.ID_ROLE_NAME );
2023+
}
2024+
2025+
@Override
2026+
public SqmPath<?> version(Path<?> path) {
2027+
return ((SqmPath<?>) path).get( EntityVersionMapping.VERSION_ROLE_NAME );
2028+
}
2029+
20192030
@Override
20202031
public <T> SqmFunction<T> function(String name, Class<T> type, Expression<?>[] args) {
20212032
final BasicType<T> resultType = getTypeConfiguration().standardBasicTypeForJavaType( type );

hibernate-core/src/main/java/org/hibernate/query/sqm/tree/domain/AbstractSqmFrom.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.hibernate.query.criteria.JpaCrossJoin;
2626
import org.hibernate.query.criteria.JpaCteCriteria;
2727
import org.hibernate.query.criteria.JpaDerivedJoin;
28+
import org.hibernate.query.criteria.JpaExpression;
2829
import org.hibernate.query.criteria.JpaFunctionJoin;
2930
import org.hibernate.query.criteria.JpaPath;
3031
import org.hibernate.query.criteria.JpaSelection;
@@ -949,4 +950,9 @@ public JpaSelection<T> alias(String name) {
949950
}
950951
return super.alias( name );
951952
}
953+
954+
@Override
955+
public JpaExpression<?> id() {
956+
return nodeBuilder().id( this );
957+
}
952958
}

0 commit comments

Comments
 (0)