Skip to content

Commit 4cc15d4

Browse files
committed
HHH-17832 Register projection usage for circular bidirectional fetch
1 parent e765929 commit 4cc15d4

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ToOneAttributeMapping.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.hibernate.metamodel.model.domain.NavigableRole;
6161
import org.hibernate.persister.collection.AbstractCollectionPersister;
6262
import org.hibernate.persister.entity.AbstractEntityPersister;
63+
import org.hibernate.persister.entity.EntityNameUse;
6364
import org.hibernate.persister.entity.EntityPersister;
6465
import org.hibernate.property.access.spi.PropertyAccess;
6566
import org.hibernate.spi.EntityIdentifierNavigablePath;
@@ -1295,6 +1296,12 @@ else if ( CollectionPart.Nature.fromNameExact( parentNavigablePath.getLocalName(
12951296
final FromClauseAccess fromClauseAccess = creationState.getSqlAstCreationState().getFromClauseAccess();
12961297
final TableGroup tableGroup = fromClauseAccess.getTableGroup( referencedNavigablePath );
12971298
fromClauseAccess.registerTableGroup( fetchablePath, tableGroup );
1299+
// Register a PROJECTION usage as we're effectively selecting the bidirectional association
1300+
creationState.getSqlAstCreationState().registerEntityNameUsage(
1301+
tableGroup,
1302+
EntityNameUse.PROJECTION,
1303+
entityMappingType.getEntityName()
1304+
);
12981305
return buildEntityFetchJoined(
12991306
fetchParent,
13001307
this,

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3031,7 +3031,12 @@ public void registerEntityNameUsage(
30313031
TableGroup tableGroup,
30323032
EntityNameUse entityNameUse,
30333033
String hibernateEntityName) {
3034-
registerEntityNameUsage( tableGroup, entityNameUse, hibernateEntityName, false );
3034+
registerEntityNameUsage(
3035+
tableGroup,
3036+
entityNameUse,
3037+
hibernateEntityName,
3038+
entityNameUse.getKind() == EntityNameUse.UseKind.PROJECTION
3039+
);
30353040
}
30363041

30373042
private void registerEntityNameUsage(

0 commit comments

Comments
 (0)