From fbdec58da2447a3b94d2ef851b009258c2e398b5 Mon Sep 17 00:00:00 2001 From: Olivier Bourgain Date: Mon, 12 Aug 2024 10:38:18 +0200 Subject: [PATCH] HHH-18475 fix race condition in AbstractRowMapper --- .../loader/plan/exec/process/internal/AbstractRowReader.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/loader/plan/exec/process/internal/AbstractRowReader.java b/hibernate-core/src/main/java/org/hibernate/loader/plan/exec/process/internal/AbstractRowReader.java index 3f80975a2e..d8054d673f 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/plan/exec/process/internal/AbstractRowReader.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/plan/exec/process/internal/AbstractRowReader.java @@ -50,7 +50,7 @@ public abstract class AbstractRowReader implements RowReader { // cache map for looking up EntityReferenceInitializer by EntityReference to help with resolving // bidirectional EntityReference and fetches. - private Map entityInitializerByEntityReference; + private volatile Map entityInitializerByEntityReference; public AbstractRowReader(ReaderCollector readerCollector) { this.entityReferenceInitializers = readerCollector.getEntityReferenceInitializers().toArray( EMPTY_REFERENCE_INITIALIZERS ); @@ -149,13 +149,14 @@ public abstract class AbstractRowReader implements RowReader { private EntityReferenceInitializer getInitializerByEntityReference(EntityReference targetEntityReference) { if ( entityInitializerByEntityReference == null ) { - entityInitializerByEntityReference = new HashMap<>( entityReferenceInitializers.length ); + Map entityInitializerByEntityReference = new HashMap<>( entityReferenceInitializers.length ); for ( EntityReferenceInitializer entityReferenceInitializer : entityReferenceInitializers ) { entityInitializerByEntityReference.put( entityReferenceInitializer.getEntityReference(), entityReferenceInitializer ); } + this.entityInitializerByEntityReference = entityInitializerByEntityReference; } return entityInitializerByEntityReference.get( targetEntityReference