diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AbstractEmbeddableMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AbstractEmbeddableMapping.java index c60d6bfd9b..bee1e9756a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AbstractEmbeddableMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AbstractEmbeddableMapping.java @@ -32,6 +32,7 @@ import org.hibernate.metamodel.mapping.AttributeMetadata; import org.hibernate.metamodel.mapping.AttributeMetadataAccess; import org.hibernate.metamodel.mapping.EmbeddableMappingType; +import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart; import org.hibernate.metamodel.mapping.ForeignKeyDescriptor; import org.hibernate.metamodel.mapping.ManagedMappingType; import org.hibernate.metamodel.mapping.SelectableMapping; @@ -194,9 +195,18 @@ else if ( attributeMapping instanceof ToOneAttributeMapping ) { attributeMapping = toOne; currentIndex += attributeMapping.getJdbcTypeCount(); } - else if ( attributeMapping instanceof EmbeddedAttributeMapping ) { - attributeMapping = ( (EmbeddedAttributeMapping) attributeMapping ).copy( declaringType ); - currentIndex = attributeMapping.getJdbcTypeCount(); + else if ( attributeMapping instanceof EmbeddableValuedModelPart ) { + final SelectableMapping[] subMappings = new SelectableMapping[attributeMapping.getJdbcTypeCount()]; + for (int i = 0; i < subMappings.length; i++) { + subMappings[i] = selectableMappings.getSelectable( currentIndex++ ); + } + attributeMapping = MappingModelCreationHelper.createInverseModelPart( + (EmbeddableValuedModelPart) attributeMapping, + declaringType, + declaringTableGroupProducer, + new SelectableMappingsImpl( subMappings ), + creationProcess + ); } else { throw new UnsupportedMappingException( diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java index 29e74a13e9..b17f8af1e1 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java @@ -354,23 +354,6 @@ public String toString() { return "EmbeddedAttributeMapping(" + navigableRole + ")@" + System.identityHashCode( this ); } - public AttributeMapping copy(ManagedMappingType declaringType) { - return new EmbeddedAttributeMapping( - getAttributeName(), - getNavigableRole(), - getStateArrayPosition(), - tableExpression, - getAttributeMetadataAccess(), - getParentInjectionAttributePropertyAccess(), - getTiming(), - getStyle(), - getEmbeddableTypeDescriptor(), - declaringType, - getPropertyAccess(), - getValueGeneration() - ); - } - private static PropertyAccess getPropertyAccess( String parentInjectionAttributeName, EmbeddableMappingType embeddableMappingType) { diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java index bf55580ff2..70b6f72dd0 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java @@ -1527,7 +1527,7 @@ else if ( element instanceof OneToMany ) { ); } - public static EmbeddableValuedModelPart createInverseModelPart( + public static EmbeddedAttributeMapping createInverseModelPart( EmbeddableValuedModelPart modelPart, ManagedMappingType keyDeclaringType, TableGroupProducer declaringTableGroupProducer, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualEmbeddedAttributeMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualEmbeddedAttributeMapping.java index d348f05604..4a9956070a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualEmbeddedAttributeMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualEmbeddedAttributeMapping.java @@ -8,7 +8,6 @@ import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; -import org.hibernate.metamodel.mapping.AttributeMapping; import org.hibernate.metamodel.mapping.AttributeMetadataAccess; import org.hibernate.metamodel.mapping.EmbeddableMappingType; import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart; @@ -99,21 +98,4 @@ public VirtualEmbeddedAttributeMapping( ); } - @Override - public AttributeMapping copy(ManagedMappingType declaringType) { - return new VirtualEmbeddedAttributeMapping( - getAttributeName(), - getNavigableRole(), - getStateArrayPosition(), - getContainingTableExpression(), - getAttributeMetadataAccess(), - getParentInjectionAttributePropertyAccess(), - getTiming(), - getStyle(), - getEmbeddableTypeDescriptor(), - declaringType, - getPropertyAccess(), - getValueGeneration() - ); - } }