HHH-17081 Avoid error for same prop name in different inheritance types

This commit is contained in:
Marco Belladelli 2023-08-23 10:02:27 +02:00
parent 14b1337d51
commit 21d13ecc11

View File

@ -419,7 +419,7 @@ protected boolean shouldSkipResolveInstance(RowProcessingState rowProcessingStat
.getEntityMetamodel() .getEntityMetamodel()
.isPolymorphic() ) { .isPolymorphic() ) {
parentInitializer.resolveKey( rowProcessingState ); parentInitializer.resolveKey( rowProcessingState );
return isReferencedModelPartInConcreteParent( return !isReferencedModelPartInConcreteParent(
modelPart, modelPart,
currentNavigablePath, currentNavigablePath,
parentInitializer parentInitializer
@ -437,7 +437,13 @@ private boolean isReferencedModelPartInConcreteParent(
final EntityPersister parentConcreteDescriptor = parentInitializer.asEntityInitializer() final EntityPersister parentConcreteDescriptor = parentInitializer.asEntityInitializer()
.getConcreteDescriptor(); .getConcreteDescriptor();
if ( parentConcreteDescriptor != null && parentConcreteDescriptor.getEntityMetamodel().isPolymorphic() ) { if ( parentConcreteDescriptor != null && parentConcreteDescriptor.getEntityMetamodel().isPolymorphic() ) {
final ModelPart concreteModelPart = parentConcreteDescriptor.findByPath( partNavigablePath.getLocalName() ); final EntityMappingType entityType = modelPart.asAttributeMapping() != null ?
modelPart.asAttributeMapping().getDeclaringType().findContainingEntityMapping() :
modelPart.asEntityMappingType();
final ModelPart concreteModelPart = parentConcreteDescriptor.findSubPart(
partNavigablePath.getLocalName(),
entityType
);
if ( concreteModelPart == null if ( concreteModelPart == null
|| !modelPart.getJavaType().getJavaTypeClass() || !modelPart.getJavaType().getJavaTypeClass()
.isAssignableFrom( concreteModelPart.getJavaType().getJavaTypeClass() ) ) { .isAssignableFrom( concreteModelPart.getJavaType().getJavaTypeClass() ) ) {
@ -470,11 +476,11 @@ class AddressB extends Address{
and for AddressB skip resolving the EntityJoinedFetchInitializer of UserA and for AddressB skip resolving the EntityJoinedFetchInitializer of UserA
*/ */
return true;
}
}
return false; return false;
} }
}
return true;
}
protected void resolveEntityInstance( protected void resolveEntityInstance(
RowProcessingState rowProcessingState, RowProcessingState rowProcessingState,