Skip to content

Commit 14b8e31

Browse files
committed
HHH-19076 Resolve member of MappedSuperclass specially
1 parent 13da270 commit 14b8e31

File tree

1 file changed

+42
-51
lines changed

1 file changed

+42
-51
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/internal/AttributeFactory.java

Lines changed: 42 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -776,72 +776,63 @@ private static Member resolveMappedSuperclassMember(
776776
Property property,
777777
MappedSuperclassDomainType<?> ownerType,
778778
MetadataContext metadataContext) {
779-
final EntityPersister declaringEntity = getDeclaringEntity( (AbstractIdentifiableType<?>) ownerType, metadataContext );
780-
if ( declaringEntity != null ) {
781-
return resolveEntityMember( property, declaringEntity );
782-
}
783-
else {
784-
final ManagedDomainType<?> subType = ownerType.getSubTypes().iterator().next();
785-
final Type.PersistenceType persistenceType = subType.getPersistenceType();
786-
if ( persistenceType == Type.PersistenceType.ENTITY ) {
787-
return resolveEntityMember( property, getDeclaringEntity( (AbstractIdentifiableType<?>) subType, metadataContext ) );
788-
}
789-
else if ( persistenceType == Type.PersistenceType.EMBEDDABLE ) {
790-
return resolveEmbeddedMember( property, (EmbeddableDomainType<?>) subType, metadataContext );
791-
}
792-
else if ( persistenceType == Type.PersistenceType.MAPPED_SUPERCLASS ) {
793-
return resolveMappedSuperclassMember(
794-
property,
795-
(MappedSuperclassDomainType<?>) subType,
796-
metadataContext
797-
);
798-
}
799-
else {
800-
throw new IllegalArgumentException( "Unexpected sub-type: " + persistenceType );
801-
}
802-
}
779+
return property.getGetter( ownerType.getJavaType() ).getMember();
803780
}
804781

805782
private final MemberResolver identifierMemberResolver = (attributeContext, metadataContext) -> {
806783
final AbstractIdentifiableType<?> identifiableType =
807784
(AbstractIdentifiableType<?>) attributeContext.getOwnerType();
808-
final EntityPersister declaringEntityMapping = getDeclaringEntity( identifiableType, metadataContext );
809-
final EntityIdentifierMapping identifierMapping = declaringEntityMapping.getIdentifierMapping();
810-
final Property propertyMapping = attributeContext.getPropertyMapping();
811-
if ( !propertyMapping.getName().equals( identifierMapping.getAttributeName() ) ) {
812-
// this *should* indicate processing part of an IdClass...
813-
return virtualIdentifierMemberResolver.resolveMember( attributeContext, metadataContext );
814-
}
815-
816-
final Getter getter = getter( declaringEntityMapping, propertyMapping );
817-
if ( getter instanceof PropertyAccessMapImpl.GetterImpl ) {
818-
return new MapMember( identifierMapping.getAttributeName(), identifierMapping.getJavaType().getJavaTypeClass() );
785+
if ( identifiableType instanceof MappedSuperclassDomainType<?> ) {
786+
return attributeContext.getPropertyMapping()
787+
.getGetter( identifiableType.getJavaType() )
788+
.getMember();
819789
}
820790
else {
821-
return getter.getMember();
791+
final EntityPersister declaringEntityMapping = getDeclaringEntity( identifiableType, metadataContext );
792+
final EntityIdentifierMapping identifierMapping = declaringEntityMapping.getIdentifierMapping();
793+
final Property propertyMapping = attributeContext.getPropertyMapping();
794+
if ( !propertyMapping.getName().equals( identifierMapping.getAttributeName() ) ) {
795+
// this *should* indicate processing part of an IdClass...
796+
return virtualIdentifierMemberResolver.resolveMember( attributeContext, metadataContext );
797+
}
798+
799+
final Getter getter = getter( declaringEntityMapping, propertyMapping );
800+
if ( getter instanceof PropertyAccessMapImpl.GetterImpl ) {
801+
return new MapMember( identifierMapping.getAttributeName(), identifierMapping.getJavaType().getJavaTypeClass() );
802+
}
803+
else {
804+
return getter.getMember();
805+
}
822806
}
823807
};
824808

825809
private final MemberResolver versionMemberResolver = (attributeContext, metadataContext) -> {
826810
final AbstractIdentifiableType<?> identifiableType =
827811
(AbstractIdentifiableType<?>) attributeContext.getOwnerType();
828-
final EntityPersister entityPersister = getDeclaringEntity( identifiableType, metadataContext );
829-
final EntityVersionMapping versionMapping = entityPersister.getVersionMapping();
830-
assert entityPersister.isVersioned();
831-
assert versionMapping != null;
832-
833-
final String versionPropertyName = attributeContext.getPropertyMapping().getName();
834-
if ( !versionPropertyName.equals( versionMapping.getVersionAttribute().getAttributeName() ) ) {
835-
// this should never happen, but to be safe...
836-
throw new IllegalArgumentException( "Given property did not match declared version property" );
837-
}
838-
839-
final Getter getter = getter( entityPersister, attributeContext.getPropertyMapping() );
840-
if ( getter instanceof PropertyAccessMapImpl.GetterImpl ) {
841-
return new MapMember( versionPropertyName, versionMapping.getJavaType().getJavaTypeClass() );
812+
if ( identifiableType instanceof MappedSuperclassDomainType<?> ) {
813+
return attributeContext.getPropertyMapping()
814+
.getGetter( identifiableType.getJavaType() )
815+
.getMember();
842816
}
843817
else {
844-
return getter.getMember();
818+
final EntityPersister entityPersister = getDeclaringEntity( identifiableType, metadataContext );
819+
final EntityVersionMapping versionMapping = entityPersister.getVersionMapping();
820+
assert entityPersister.isVersioned();
821+
assert versionMapping != null;
822+
823+
final String versionPropertyName = attributeContext.getPropertyMapping().getName();
824+
if ( !versionPropertyName.equals( versionMapping.getVersionAttribute().getAttributeName() ) ) {
825+
// this should never happen, but to be safe...
826+
throw new IllegalArgumentException( "Given property did not match declared version property" );
827+
}
828+
829+
final Getter getter = getter( entityPersister, attributeContext.getPropertyMapping() );
830+
if ( getter instanceof PropertyAccessMapImpl.GetterImpl ) {
831+
return new MapMember( versionPropertyName, versionMapping.getJavaType().getJavaTypeClass() );
832+
}
833+
else {
834+
return getter.getMember();
835+
}
845836
}
846837
};
847838

0 commit comments

Comments
 (0)