Skip to content

Commit

Permalink
Fix wrong key model of FK for inverse FK side
Browse files Browse the repository at this point in the history
  • Loading branch information
beikov committed May 7, 2021
1 parent 867dd52 commit a864e25
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class EmbeddedForeignKeyDescriptor implements ForeignKeyDescriptor {
private AssociationKey associationKey;

public EmbeddedForeignKeyDescriptor(
EmbeddableValuedModelPart keyMappingType,
EmbeddableValuedModelPart targetMappingType,
String keyTable,
SelectableMappings keySelectableMappings,
Expand All @@ -72,11 +73,7 @@ public EmbeddedForeignKeyDescriptor(
this.targetTable = targetTable;
this.targetSelectableMappings = targetSelectableMappings;
this.targetMappingType = targetMappingType;
this.keyMappingType = EmbeddedAttributeMapping.createInverseModelPart(
targetMappingType,
keySelectableMappings,
creationProcess
);
this.keyMappingType = keyMappingType;

creationProcess.registerInitializationCallback(
"Embedded (composite) FK descriptor " + targetMappingType.getNavigableRole(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1134,6 +1134,11 @@ private static EmbeddedForeignKeyDescriptor buildEmbeddableForeignKeyDescriptor(
if ( inverse ) {
return new EmbeddedForeignKeyDescriptor(
embeddableValuedModelPart,
EmbeddedAttributeMapping.createInverseModelPart(
embeddableValuedModelPart,
keySelectableMappings,
creationProcess
),
embeddableValuedModelPart.getContainingTableExpression(),
embeddableValuedModelPart.getEmbeddableTypeDescriptor(),
keyTableExpression,
Expand All @@ -1143,6 +1148,11 @@ private static EmbeddedForeignKeyDescriptor buildEmbeddableForeignKeyDescriptor(
}
else {
return new EmbeddedForeignKeyDescriptor(
EmbeddedAttributeMapping.createInverseModelPart(
embeddableValuedModelPart,
keySelectableMappings,
creationProcess
),
embeddableValuedModelPart,
keyTableExpression,
keySelectableMappings,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -610,9 +610,6 @@ public EntityFetch generateFetch(
);
}

//noinspection rawtypes
final DomainResult keyResult;

/*
1. No JoinTable
Model:
Expand All @@ -637,15 +634,21 @@ public EntityFetch generateFetch(
*/

final boolean isKeyReferringSide;
if ( isFetchingForeignKey( fetchParent.getNavigablePath() ) ) {
isKeyReferringSide = !this.isKeyReferringSide;
}
else{
isKeyReferringSide = this.isKeyReferringSide;
}
final DomainResult<?> keyResult = foreignKeyDescriptor.createDomainResult( fetchablePath, parentTableGroup, isKeyReferringSide, creationState );
boolean selectByUniqueKey;
if ( isKeyReferringSide ) {
// case 1.2
keyResult = foreignKeyDescriptor.createDomainResult( fetchablePath, parentTableGroup, creationState );
selectByUniqueKey = false;
}
else {
// case 1.1
keyResult = foreignKeyDescriptor.createDomainResult( fetchablePath, parentTableGroup, isKeyReferringSide, creationState );
selectByUniqueKey = bidirectionalAttributeName != null;
}

Expand All @@ -669,6 +672,16 @@ public EntityFetch generateFetch(
);
}

private boolean isFetchingForeignKey(NavigablePath p) {
while ( p != null ) {
if ( ForeignKeyDescriptor.PART_NAME.equals( p.getLocalName() ) ) {
return true;
}
p = p.getParent();
}
return false;
}

@Override
public <T> DomainResult<T> createDelayedDomainResult(
NavigablePath navigablePath,
Expand Down

0 comments on commit a864e25

Please sign in to comment.