From 4806398eccd515e741199eb51bfec36c927eb52a Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Thu, 13 Aug 2020 09:34:47 +0100 Subject: [PATCH] EmbeddedIdentifierMappingImpl implements SingleAttributeIdentifierMapping --- .../EmbeddedIdentifierMappingImpl.java | 13 ++- .../entity/AbstractEntityResultGraphNode.java | 86 ++++++++----------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedIdentifierMappingImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedIdentifierMappingImpl.java index 01cc6fcb94..f6c8b1e74e 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedIdentifierMappingImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedIdentifierMappingImpl.java @@ -37,7 +37,8 @@ import org.hibernate.sql.ast.tree.from.TableReference; * * @author Andrea Boriero */ -public class EmbeddedIdentifierMappingImpl extends AbstractCompositeIdentifierMapping { +public class EmbeddedIdentifierMappingImpl extends AbstractCompositeIdentifierMapping + implements SingleAttributeIdentifierMapping { private final String name; private final PropertyAccess propertyAccess; @@ -177,4 +178,14 @@ public class EmbeddedIdentifierMappingImpl extends AbstractCompositeIdentifierMa return (Collection) getEmbeddableTypeDescriptor().getAttributeMappings(); } + @Override + public PropertyAccess getPropertyAccess() { + return propertyAccess; + } + + @Override + public String getAttributeName() { + return name; + } + } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/AbstractEntityResultGraphNode.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/AbstractEntityResultGraphNode.java index 75e9bbbfc5..2125f0bdff 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/AbstractEntityResultGraphNode.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/AbstractEntityResultGraphNode.java @@ -6,8 +6,6 @@ */ package org.hibernate.sql.results.graph.entity; -import java.util.ArrayList; - import org.hibernate.LockMode; import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping; import org.hibernate.metamodel.mapping.EntityIdentifierMapping; @@ -16,7 +14,7 @@ import org.hibernate.metamodel.mapping.EntityRowIdMapping; import org.hibernate.metamodel.mapping.EntityValuedModelPart; import org.hibernate.metamodel.mapping.EntityVersionMapping; import org.hibernate.metamodel.mapping.ManagedMappingType; -import org.hibernate.metamodel.mapping.internal.SingleAttributeIdentifierMapping; +import org.hibernate.metamodel.mapping.MappingType; import org.hibernate.metamodel.mapping.internal.ToOneAttributeMapping; import org.hibernate.persister.entity.AbstractEntityPersister; import org.hibernate.query.EntityIdentifierNavigablePath; @@ -70,29 +68,14 @@ public abstract class AbstractEntityResultGraphNode extends AbstractFetchParent final EntityIdentifierMapping identifierMapping = entityDescriptor.getIdentifierMapping(); + final EntityIdentifierNavigablePath identifierNavigablePath = new EntityIdentifierNavigablePath( navigablePath, attributeName( identifierMapping ) ); if ( navigablePath.getParent() == null && !creationState.forceIdentifierSelection() ) { identifierResult = null; - if ( identifierMapping instanceof SingleAttributeIdentifierMapping ) { - identifierMapping.createDomainResult( - new EntityIdentifierNavigablePath( - navigablePath, - attributeName( identifierMapping ) - ), - entityTableGroup, - null, - creationState - ); - } - else { - visitCompositeIdentifierMapping( navigablePath, creationState, identifierMapping, entityTableGroup ); - } + visitIdentifierMapping( identifierNavigablePath, creationState, identifierMapping, entityTableGroup ); } else { identifierResult = identifierMapping.createDomainResult( - new EntityIdentifierNavigablePath( - navigablePath, - attributeName( identifierMapping ) - ), + identifierNavigablePath, entityTableGroup, null, creationState @@ -139,39 +122,42 @@ public abstract class AbstractEntityResultGraphNode extends AbstractFetchParent } } - private void visitCompositeIdentifierMapping( - NavigablePath navigablePath, + private void visitIdentifierMapping( + EntityIdentifierNavigablePath navigablePath, DomainResultCreationState creationState, EntityIdentifierMapping identifierMapping, TableGroup entityTableGroup) { - ManagedMappingType mappingType = (ManagedMappingType) identifierMapping.getPartMappingType(); - fetches = new ArrayList<>(); - mappingType.visitAttributeMappings( - attributeMapping -> { - if ( attributeMapping instanceof ToOneAttributeMapping ) { - ( (ToOneAttributeMapping) attributeMapping ).getForeignKeyDescriptor().createDomainResult( - new EntityIdentifierNavigablePath( - navigablePath, - attributeName( identifierMapping ) - ), - entityTableGroup, - null, - creationState - ); + final MappingType mappingType = identifierMapping.getPartMappingType(); + if ( mappingType instanceof ManagedMappingType ) { + ( (ManagedMappingType) mappingType ).visitAttributeMappings( + attributeMapping -> { + if ( attributeMapping instanceof ToOneAttributeMapping ) { + ( (ToOneAttributeMapping) attributeMapping ).getForeignKeyDescriptor().createDomainResult( + navigablePath, + entityTableGroup, + null, + creationState + ); + } + else { + attributeMapping.createDomainResult( + navigablePath, + entityTableGroup, + null, + creationState + ); + } } - else { - attributeMapping.createDomainResult( - new EntityIdentifierNavigablePath( - navigablePath, - attributeName( identifierMapping ) - ), - entityTableGroup, - null, - creationState - ); - } - } - ); + ); + } + else { + identifierMapping.createDomainResult( + navigablePath, + entityTableGroup, + null, + creationState + ); + } } protected EntityDiscriminatorMapping getDiscriminatorMapping(