HHH-15606 @OneToOne(mappedBy = ..., fetch = LAZY) in embedded leads to IllegalArgumentException: Can not set [...] to LazyPropertyInitializer

This commit is contained in:
Andrea Boriero 2022-11-18 12:45:16 +01:00 committed by Andrea Boriero
parent a2a2a83684
commit 2171d3b24a

View File

@ -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