Skip to content

Commit 3875f80

Browse files
committed
HHH-17178 Add `{element} to treated plural joins by default and fix tg registration
1 parent 7efb077 commit 3875f80

File tree

7 files changed

+26
-45
lines changed

7 files changed

+26
-45
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2819,27 +2819,8 @@ else if ( sqmRoot instanceof SqmCteRoot<?> ) {
28192819
private void registerSqmFromTableGroup(SqmFrom<?, ?> sqmFrom, TableGroup tableGroup) {
28202820
getFromClauseIndex().register( sqmFrom, tableGroup );
28212821
// We also need to register the table group for the treats
2822-
if ( tableGroup instanceof PluralTableGroup ) {
2823-
final PluralTableGroup pluralTableGroup = (PluralTableGroup) tableGroup;
2824-
for ( SqmFrom<?, ?> sqmTreat : sqmFrom.getSqmTreats() ) {
2825-
if ( pluralTableGroup.getElementTableGroup() != null ) {
2826-
getFromClauseAccess().registerTableGroup(
2827-
sqmTreat.getNavigablePath().append( CollectionPart.Nature.ELEMENT.getName() ),
2828-
pluralTableGroup.getElementTableGroup()
2829-
);
2830-
}
2831-
if ( pluralTableGroup.getIndexTableGroup() != null ) {
2832-
getFromClauseAccess().registerTableGroup(
2833-
sqmTreat.getNavigablePath().append( CollectionPart.Nature.INDEX.getName() ),
2834-
pluralTableGroup.getIndexTableGroup()
2835-
);
2836-
}
2837-
}
2838-
}
2839-
else {
2840-
for ( SqmFrom<?, ?> sqmTreat : sqmFrom.getSqmTreats() ) {
2841-
getFromClauseAccess().registerTableGroup( sqmTreat.getNavigablePath(), tableGroup );
2842-
}
2822+
for ( SqmFrom<?, ?> sqmTreat : sqmFrom.getSqmTreats() ) {
2823+
getFromClauseAccess().registerTableGroup( sqmTreat.getNavigablePath(), tableGroup );
28432824
}
28442825
}
28452826

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.spi.NavigablePath;
2222
import org.hibernate.sql.ast.Clause;
2323
import org.hibernate.sql.ast.SqlAstWalker;
24-
import org.hibernate.sql.ast.spi.FromClauseAccess;
2524
import org.hibernate.sql.ast.tree.expression.ColumnReference;
2625
import org.hibernate.sql.ast.tree.expression.Expression;
2726
import org.hibernate.sql.ast.tree.expression.SqlSelectionExpression;

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.hibernate.metamodel.model.domain.EntityDomainType;
1919
import org.hibernate.query.sqm.sql.SqmToSqlAstConverter;
2020
import org.hibernate.query.sqm.tree.domain.SqmEmbeddedValuedSimplePath;
21+
import org.hibernate.query.sqm.tree.domain.SqmPath;
2122
import org.hibernate.query.sqm.tree.domain.SqmTreatedPath;
2223
import org.hibernate.query.sqm.tree.from.SqmFrom;
2324
import org.hibernate.query.sqm.tree.select.SqmQueryPart;
@@ -43,22 +44,22 @@ public static <T> Expression from(
4344
SqmEmbeddedValuedSimplePath<T> sqmPath,
4445
SqmToSqlAstConverter sqlAstCreationState,
4546
boolean jpaQueryComplianceEnabled) {
46-
TableGroup tableGroup = sqlAstCreationState.getFromClauseAccess().findTableGroup( sqmPath.getLhs().getNavigablePath() );
47-
47+
final SqmPath<?> lhs = sqmPath.getLhs();
48+
final TableGroup tableGroup = sqlAstCreationState.getFromClauseAccess().getTableGroup( lhs.getNavigablePath() );
4849
EntityMappingType treatTarget = null;
4950
if ( jpaQueryComplianceEnabled ) {
5051
final MappingMetamodel mappingMetamodel = sqlAstCreationState.getCreationContext()
5152
.getSessionFactory()
5253
.getRuntimeMetamodels()
5354
.getMappingMetamodel();
54-
if ( sqmPath.getLhs() instanceof SqmTreatedPath ) {
55+
if ( lhs instanceof SqmTreatedPath ) {
5556
//noinspection rawtypes
56-
final EntityDomainType<?> treatTargetDomainType = ( (SqmTreatedPath) sqmPath.getLhs() ).getTreatTarget();
57+
final EntityDomainType<?> treatTargetDomainType = ( (SqmTreatedPath) lhs ).getTreatTarget();
5758
treatTarget = mappingMetamodel.findEntityDescriptor( treatTargetDomainType.getHibernateEntityName() );
5859
}
59-
else if ( sqmPath.getLhs().getNodeType() instanceof EntityDomainType ) {
60+
else if ( lhs.getNodeType() instanceof EntityDomainType ) {
6061
//noinspection rawtypes
61-
final EntityDomainType<?> entityDomainType = (EntityDomainType) sqmPath.getLhs().getNodeType();
62+
final EntityDomainType<?> entityDomainType = (EntityDomainType) lhs.getNodeType();
6263
treatTarget = mappingMetamodel.findEntityDescriptor( entityDomainType.getHibernateEntityName() );
6364

6465
}
@@ -72,7 +73,7 @@ else if ( sqmPath.getLhs().getNodeType() instanceof EntityDomainType ) {
7273
final Clause currentClause = sqlAstCreationState.getCurrentClauseStack().getCurrent();
7374
final SqmQueryPart<?> sqmQueryPart = sqlAstCreationState.getCurrentSqmQueryPart();
7475
if ( ( currentClause == Clause.GROUP || currentClause == Clause.SELECT || currentClause == Clause.ORDER || currentClause == Clause.HAVING )
75-
&& sqmPath.getLhs() instanceof SqmFrom<?, ?>
76+
&& lhs instanceof SqmFrom<?, ?>
7677
&& modelPart.getPartMappingType() instanceof ManagedMappingType
7778
&& sqmQueryPart.isSimpleQueryPart()
7879
&& sqmQueryPart.getFirstQuerySpec().groupByClauseContains( sqmPath.getNavigablePath() ) ) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.query.sqm.tree.domain;
88

9+
import org.hibernate.metamodel.mapping.CollectionPart;
910
import org.hibernate.metamodel.model.domain.BagPersistentAttribute;
1011
import org.hibernate.metamodel.model.domain.EntityDomainType;
1112
import org.hibernate.query.hql.spi.SqmCreationProcessingState;
@@ -28,10 +29,9 @@ public SqmTreatedBagJoin(
2829
//noinspection unchecked
2930
super(
3031
wrappedPath.getLhs(),
31-
wrappedPath.getNavigablePath().treatAs(
32-
treatTarget.getHibernateEntityName(),
33-
alias
34-
),
32+
wrappedPath.getNavigablePath()
33+
.append( CollectionPart.Nature.ELEMENT.getName() )
34+
.treatAs( treatTarget.getHibernateEntityName(), alias ),
3535
(BagPersistentAttribute<O, S>) wrappedPath.getAttribute(),
3636
alias,
3737
wrappedPath.getSqmJoinType(),

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.query.sqm.tree.domain;
88

9+
import org.hibernate.metamodel.mapping.CollectionPart;
910
import org.hibernate.metamodel.model.domain.EntityDomainType;
1011
import org.hibernate.metamodel.model.domain.ListPersistentAttribute;
1112
import org.hibernate.query.hql.spi.SqmCreationProcessingState;
@@ -30,10 +31,9 @@ public SqmTreatedListJoin(
3031
//noinspection unchecked
3132
super(
3233
wrappedPath.getLhs(),
33-
wrappedPath.getNavigablePath().treatAs(
34-
treatTarget.getHibernateEntityName(),
35-
alias
36-
),
34+
wrappedPath.getNavigablePath()
35+
.append( CollectionPart.Nature.ELEMENT.getName() )
36+
.treatAs( treatTarget.getHibernateEntityName(), alias ),
3737
(ListPersistentAttribute<O, S>) wrappedPath.getAttribute(),
3838
alias,
3939
wrappedPath.getSqmJoinType(),

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.query.sqm.tree.domain;
88

9+
import org.hibernate.metamodel.mapping.CollectionPart;
910
import org.hibernate.metamodel.model.domain.EntityDomainType;
1011
import org.hibernate.query.hql.spi.SqmCreationProcessingState;
1112
import org.hibernate.query.sqm.SqmPathSource;
@@ -26,10 +27,9 @@ public SqmTreatedMapJoin(
2627
//noinspection unchecked
2728
super(
2829
wrappedPath.getLhs(),
29-
wrappedPath.getNavigablePath().treatAs(
30-
treatTarget.getHibernateEntityName(),
31-
alias
32-
),
30+
wrappedPath.getNavigablePath()
31+
.append( CollectionPart.Nature.ELEMENT.getName() )
32+
.treatAs( treatTarget.getHibernateEntityName(), alias ),
3333
( (SqmMapJoin<O, K, S>) wrappedPath ).getModel(),
3434
alias,
3535
wrappedPath.getSqmJoinType(),

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.query.sqm.tree.domain;
88

9+
import org.hibernate.metamodel.mapping.CollectionPart;
910
import org.hibernate.metamodel.model.domain.EntityDomainType;
1011
import org.hibernate.metamodel.model.domain.SetPersistentAttribute;
1112
import org.hibernate.query.hql.spi.SqmCreationProcessingState;
@@ -28,10 +29,9 @@ public SqmTreatedSetJoin(
2829
//noinspection unchecked
2930
super(
3031
wrappedPath.getLhs(),
31-
wrappedPath.getNavigablePath().treatAs(
32-
treatTarget.getHibernateEntityName(),
33-
alias
34-
),
32+
wrappedPath.getNavigablePath()
33+
.append( CollectionPart.Nature.ELEMENT.getName() )
34+
.treatAs( treatTarget.getHibernateEntityName(), alias ),
3535
(SetPersistentAttribute<O, S>) wrappedPath.getAttribute(),
3636
alias,
3737
wrappedPath.getSqmJoinType(),

0 commit comments

Comments
 (0)