From 0cea4d345f2866bff0535a4fa04e9fdf5b1766f1 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 18 Sep 2024 15:30:35 +0200 Subject: [PATCH] HHH-18632 Concurrency issue with AbstractEntityPersister#nonLazyPropertyLoadPlansByName --- .../persister/entity/AbstractEntityPersister.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index 612ec60d0c0b..99772f9877cf 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -464,7 +464,7 @@ public abstract class AbstractEntityPersister private final boolean implementsLifecycle; private List uniqueKeyEntries = null; //lazily initialized - private HashMap nonLazyPropertyLoadPlansByName; + private ConcurrentHashMap nonLazyPropertyLoadPlansByName; public AbstractEntityPersister( final PersistentClass persistentClass, @@ -1552,17 +1552,17 @@ protected Object initializeLazyPropertiesFromDatastore( int propertyIndex = getPropertyIndex( fieldName ); partsToSelect.add( getAttributeMapping( propertyIndex ) ); SingleIdArrayLoadPlan lazyLoanPlan; - if ( nonLazyPropertyLoadPlansByName == null ) { - nonLazyPropertyLoadPlansByName = new HashMap<>(); + ConcurrentHashMap propertyLoadPlansByName = this.nonLazyPropertyLoadPlansByName; + if ( propertyLoadPlansByName == null ) { + propertyLoadPlansByName = new ConcurrentHashMap<>(); lazyLoanPlan = createLazyLoanPlan( partsToSelect ); - ; - nonLazyPropertyLoadPlansByName.put( fieldName, lazyLoanPlan ); + propertyLoadPlansByName.put( fieldName, lazyLoanPlan ); + this.nonLazyPropertyLoadPlansByName = propertyLoadPlansByName; } else { lazyLoanPlan = nonLazyPropertyLoadPlansByName.get( fieldName ); if ( lazyLoanPlan == null ) { lazyLoanPlan = createLazyLoanPlan( partsToSelect ); - ; nonLazyPropertyLoadPlansByName.put( fieldName, lazyLoanPlan ); } }