Skip to content

Commit d6ac535

Browse files
gbadnersebersole
authored andcommitted
HHH-8276 - Integrate LoadPlans into UniqueEntityLoader (PoC)
1 parent 803c73c commit d6ac535

File tree

5 files changed

+18
-1
lines changed

5 files changed

+18
-1
lines changed

hibernate-core/src/main/java/org/hibernate/loader/plan/spi/build/AbstractLoadPlanBuilderStrategy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,11 @@ public void finishingAttribute(AttributeDefinition attributeDefinition) {
416416

417417
private Map<AssociationKey,FetchOwner> fetchedAssociationKeyOwnerMap = new HashMap<AssociationKey, FetchOwner>();
418418

419+
@Override
420+
public boolean isDuplicateAssociationKey(AssociationKey associationKey) {
421+
return fetchedAssociationKeyOwnerMap.containsKey( associationKey );
422+
}
423+
419424
@Override
420425
public void associationKeyRegistered(AssociationKey associationKey) {
421426
// todo : use this information to maintain a map of AssociationKey->FetchOwner mappings (associationKey + current fetchOwner stack entry)

hibernate-core/src/main/java/org/hibernate/loader/plan2/build/spi/AbstractLoadPlanBuildingAssociationVisitationStrategy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,11 @@ public void finishingAttribute(AttributeDefinition attributeDefinition) {
553553

554554
private Map<AssociationKey,FetchSource> fetchedAssociationKeySourceMap = new HashMap<AssociationKey, FetchSource>();
555555

556+
@Override
557+
public boolean isDuplicateAssociationKey(AssociationKey associationKey) {
558+
return fetchedAssociationKeySourceMap.containsKey( associationKey );
559+
}
560+
556561
@Override
557562
public void associationKeyRegistered(AssociationKey associationKey) {
558563
// todo : use this information to maintain a map of AssociationKey->FetchSource mappings (associationKey + current FetchSource stack entry)

hibernate-core/src/main/java/org/hibernate/persister/walking/spi/AssociationVisitationStrategy.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,6 @@ public interface AssociationVisitationStrategy {
170170
public void associationKeyRegistered(AssociationKey associationKey);
171171
public FetchSource registeredFetchSource(AssociationKey associationKey);
172172
public void foundCircularAssociation(AssociationAttributeDefinition attributeDefinition);
173+
public boolean isDuplicateAssociationKey(AssociationKey associationKey);
174+
173175
}

hibernate-core/src/main/java/org/hibernate/persister/walking/spi/MetamodelGraphWalker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,6 @@ protected void addAssociationKey(AssociationKey associationKey) {
291291
* false, otherwise.
292292
*/
293293
protected boolean isDuplicateAssociationKey(AssociationKey associationKey) {
294-
return visitedAssociationKeys.contains( associationKey );
294+
return visitedAssociationKeys.contains( associationKey ) || strategy.isDuplicateAssociationKey( associationKey );
295295
}
296296
}

hibernate-core/src/test/java/org/hibernate/test/loadplans/walking/LoggingAssociationVisitationStrategy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,4 +263,9 @@ public void foundCircularAssociation(
263263
);
264264
}
265265

266+
@Override
267+
public boolean isDuplicateAssociationKey(AssociationKey associationKey) {
268+
return false; //To change body of implemented methods use File | Settings | File Templates.
269+
}
270+
266271
}

0 commit comments

Comments
 (0)