55package org .hibernate .bytecode .enhance .spi .interceptor ;
66
77import java .util .Collection ;
8- import java .util .Collections ;
98import java .util .HashSet ;
109import java .util .Set ;
1110
1211import org .hibernate .LockMode ;
1312import org .hibernate .bytecode .enhance .spi .CollectionTracker ;
1413import org .hibernate .bytecode .enhance .spi .LazyPropertyInitializer ;
1514import org .hibernate .collection .spi .PersistentCollection ;
16- import org .hibernate .engine .spi .SelfDirtinessTracker ;
1715import org .hibernate .engine .spi .SharedSessionContractImplementor ;
1816import org .hibernate .engine .spi .Status ;
19- import org .hibernate .persister .entity .EntityPersister ;
2017
18+ import static java .util .Collections .emptySet ;
2119import static org .hibernate .engine .internal .ManagedTypeHelper .asSelfDirtinessTracker ;
2220import static org .hibernate .engine .internal .ManagedTypeHelper .isSelfDirtinessTracker ;
2321
2725 * @author Luis Barreiro
2826 * @author Steve Ebersole
2927 */
30- public class LazyAttributeLoadingInterceptor extends AbstractInterceptor implements BytecodeLazyAttributeInterceptor {
28+ public class LazyAttributeLoadingInterceptor
29+ extends AbstractInterceptor
30+ implements BytecodeLazyAttributeInterceptor {
3131
3232 private final Object identifier ;
3333 private EntityRelatedState entityMeta ;
@@ -55,7 +55,7 @@ public Object getIdentifier() {
5555 @ Override
5656 protected Object handleRead (Object target , String attributeName , Object value ) {
5757 if ( !isAttributeLoaded ( attributeName ) ) {
58- Object loadedValue = fetchAttribute ( target , attributeName );
58+ final Object loadedValue = fetchAttribute ( target , attributeName );
5959 attributeInitialized ( attributeName );
6060 return loadedValue ;
6161 }
@@ -79,9 +79,9 @@ protected Object loadAttribute(final Object target, final String attributeName)
7979 return EnhancementHelper .performWork (
8080 this ,
8181 (session , isTemporarySession ) -> {
82- final EntityPersister persister = session . getFactory ()
83- .getMappingMetamodel ()
84- .getEntityDescriptor ( getEntityName () );
82+ final var persister =
83+ session . getFactory () .getMappingMetamodel ()
84+ .getEntityDescriptor ( getEntityName () );
8585
8686 if ( isTemporarySession ) {
8787 final Object id = persister .getIdentifier ( target , session );
@@ -105,12 +105,9 @@ protected Object loadAttribute(final Object target, final String attributeName)
105105 );
106106 }
107107
108- final LazyPropertyInitializer initializer = (LazyPropertyInitializer ) persister ;
109- final Object loadedValue = initializer .initializeLazyProperty (
110- attributeName ,
111- target ,
112- session
113- );
108+ final var initializer = (LazyPropertyInitializer ) persister ;
109+ final Object loadedValue =
110+ initializer .initializeLazyProperty ( attributeName , target , session );
114111
115112 takeCollectionSizeSnapshot ( target , attributeName , loadedValue );
116113 return loadedValue ;
@@ -136,36 +133,30 @@ public boolean hasAnyUninitializedAttributes() {
136133 if ( entityMeta .lazyFields .isEmpty () ) {
137134 return false ;
138135 }
139-
140- if ( initializedLazyFields == null ) {
136+ else if ( initializedLazyFields == null ) {
141137 return true ;
142138 }
143-
144- for ( String fieldName : entityMeta .lazyFields ) {
145- if ( !initializedLazyFields .contains ( fieldName ) ) {
146- return true ;
139+ else {
140+ for ( String fieldName : entityMeta .lazyFields ) {
141+ if ( !initializedLazyFields .contains ( fieldName ) ) {
142+ return true ;
143+ }
147144 }
145+ return false ;
148146 }
149-
150- return false ;
151147 }
152148
153149 @ Override
154150 public String toString () {
155- return getClass ().getSimpleName () + "(entityName=" + getEntityName () + " ,lazyFields=" + entityMeta .lazyFields + ')' ;
151+ return getClass ().getSimpleName ()
152+ + "(entityName=" + getEntityName () + " ,lazyFields=" + entityMeta .lazyFields + ')' ;
156153 }
157154
158155 private void takeCollectionSizeSnapshot (Object target , String fieldName , Object value ) {
159156 if ( value instanceof Collection <?> collection && isSelfDirtinessTracker ( target ) ) {
160157 // This must be called first, so that we remember that there is a collection out there,
161158 // even if we don't know its size (see below).
162- final SelfDirtinessTracker targetSDT = asSelfDirtinessTracker ( target );
163- CollectionTracker tracker = targetSDT .$$_hibernate_getCollectionTracker ();
164- if ( tracker == null ) {
165- targetSDT .$$_hibernate_clearDirtyAttributes ();
166- tracker = targetSDT .$$_hibernate_getCollectionTracker ();
167- }
168-
159+ var tracker = getCollectionTracker ( target );
169160 if ( value instanceof PersistentCollection <?> persistentCollection
170161 && !persistentCollection .wasInitialized () ) {
171162 // Cannot take a snapshot of an uninitialized collection.
@@ -175,20 +166,31 @@ private void takeCollectionSizeSnapshot(Object target, String fieldName, Object
175166 }
176167 }
177168
169+ private static CollectionTracker getCollectionTracker (Object target ) {
170+ final var selfDirtinessTracker = asSelfDirtinessTracker ( target );
171+ final var tracker = selfDirtinessTracker .$$_hibernate_getCollectionTracker ();
172+ if ( tracker == null ) {
173+ selfDirtinessTracker .$$_hibernate_clearDirtyAttributes ();
174+ return selfDirtinessTracker .$$_hibernate_getCollectionTracker ();
175+ }
176+ else {
177+ return tracker ;
178+ }
179+ }
180+
178181 @ Override
179182 public void attributeInitialized (String name ) {
180- if ( ! isLazyAttribute ( name ) ) {
181- return ;
182- }
183- if ( initializedLazyFields == null ) {
184- initializedLazyFields = new HashSet <>( );
183+ if ( isLazyAttribute ( name ) ) {
184+ if ( initializedLazyFields == null ) {
185+ initializedLazyFields = new HashSet <>();
186+ }
187+ initializedLazyFields . add ( name );
185188 }
186- initializedLazyFields .add ( name );
187189 }
188190
189191 @ Override
190192 public Set <String > getInitializedLazyAttributeNames () {
191- return initializedLazyFields == null ? Collections . emptySet () : initializedLazyFields ;
193+ return initializedLazyFields == null ? emptySet () : initializedLazyFields ;
192194 }
193195
194196 public void addLazyFieldByGraph (String fieldName ) {
0 commit comments