From 2171d3b24add79ef60b38bc0a678824b2cc8870c Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Fri, 18 Nov 2022 12:45:16 +0100 Subject: [PATCH] HHH-15606 @OneToOne(mappedBy = ..., fetch = LAZY) in embedded leads to IllegalArgumentException: Can not set [...] to LazyPropertyInitializer --- .../EntityDelayedFetchInitializer.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityDelayedFetchInitializer.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityDelayedFetchInitializer.java index a05ec80a9f..de725ea871 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityDelayedFetchInitializer.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityDelayedFetchInitializer.java @@ -23,6 +23,7 @@ import org.hibernate.sql.results.graph.AbstractFetchParentAccess; import org.hibernate.sql.results.graph.DomainResultAssembler; import org.hibernate.sql.results.graph.FetchParentAccess; +import org.hibernate.sql.results.graph.embeddable.EmbeddableInitializer; import org.hibernate.sql.results.graph.entity.AbstractEntityInitializer; import org.hibernate.sql.results.graph.entity.EntityInitializer; import org.hibernate.sql.results.graph.entity.LoadingEntityEntry; @@ -110,11 +111,10 @@ public void resolveInstance(RowProcessingState rowProcessingState) { } } if ( entityInstance == null ) { - if ( referencedModelPart.isOptional() && parentAccess != null && parentAccess.getInitializedPart() - .findContainingEntityMapping() - .getEntityPersister() - .getBytecodeEnhancementMetadata() - .isEnhancedForLazyLoading() ) { + if ( referencedModelPart.isOptional() + && parentAccess != null + && !parentAccess.isEmbeddableInitializer() + && isEnhancedForLazyLoading( parentAccess ) ) { entityInstance = LazyPropertyInitializer.UNFETCHED_PROPERTY; } else { @@ -138,9 +138,9 @@ public void resolveInstance(RowProcessingState rowProcessingState) { final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); entityInstance = persistenceContext.getEntity( euk ); if ( entityInstance == null ) { - if ( ( (AbstractEntityInitializer) this.parentAccess.findFirstEntityDescriptorAccess() ).getEntityDescriptor() - .getBytecodeEnhancementMetadata() - .isEnhancedForLazyLoading() ) { + if ( parentAccess != null + && !parentAccess.isEmbeddableInitializer() + && isEnhancedForLazyLoading( parentAccess ) ) { return; } entityInstance = ( (UniqueKeyLoadable) concreteDescriptor ).loadByUniqueKey( @@ -179,6 +179,11 @@ public void resolveInstance(RowProcessingState rowProcessingState) { } } + private static boolean isEnhancedForLazyLoading(FetchParentAccess parentAccess) { + return parentAccess.findFirstEntityInitializer().getEntityDescriptor().getBytecodeEnhancementMetadata() + .isEnhancedForLazyLoading(); + } + @Override public void initializeInstance(RowProcessingState rowProcessingState) { // nothing to do