Skip to content

Commit 0a76cbe

Browse files
committed
refactoring + cleanups ('var') in loader.internal package
1 parent d2295d1 commit 0a76cbe

File tree

3 files changed

+113
-124
lines changed

3 files changed

+113
-124
lines changed

hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@
1616
import org.hibernate.LockMode;
1717
import org.hibernate.LockOptions;
1818
import org.hibernate.UnknownProfileException;
19-
import org.hibernate.engine.spi.EffectiveEntityGraph;
20-
import org.hibernate.engine.spi.EntityEntry;
21-
import org.hibernate.engine.spi.LoadQueryInfluencers;
22-
import org.hibernate.engine.spi.PersistenceContext;
2319
import org.hibernate.engine.spi.SessionImplementor;
2420
import org.hibernate.engine.spi.Status;
2521
import org.hibernate.graph.GraphSemantic;
@@ -28,7 +24,6 @@
2824
import org.hibernate.metamodel.mapping.EntityMappingType;
2925
import org.hibernate.persister.entity.EntityPersister;
3026
import org.hibernate.proxy.HibernateProxy;
31-
import org.hibernate.proxy.LazyInitializer;
3227

3328
import static org.hibernate.engine.spi.NaturalIdResolutions.INVALID_NATURAL_ID_REFERENCE;
3429
import static org.hibernate.internal.NaturalIdHelper.performAnyNeededCrossReferenceSynchronizations;
@@ -176,22 +171,20 @@ protected final T doLoad(Object normalizedNaturalIdValue) {
176171
return null;
177172
}
178173
else {
179-
final SessionImplementor session = context.getSession();
180-
final LoadQueryInfluencers influencers = session.getLoadQueryInfluencers();
181-
final var fetchProfiles =
182-
influencers.adjustFetchProfiles( disabledFetchProfiles, enabledFetchProfiles );
183-
final EffectiveEntityGraph effectiveEntityGraph =
184-
session.getLoadQueryInfluencers().applyEntityGraph( rootGraph, graphSemantic);
174+
final var session = context.getSession();
175+
final var influencers = session.getLoadQueryInfluencers();
176+
final var fetchProfiles = influencers.adjustFetchProfiles( disabledFetchProfiles, enabledFetchProfiles );
177+
final var effectiveEntityGraph = influencers.applyEntityGraph( rootGraph, graphSemantic );
185178
try {
186179
@SuppressWarnings("unchecked")
187180
final T loaded = cachedResolution != null
188181
? identifierLoadAccess().load(cachedResolution)
189182
: (T) entityPersister().getNaturalIdLoader()
190183
.load( normalizedNaturalIdValue, this, session );
191184
if ( loaded != null ) {
192-
final PersistenceContext persistenceContext = session.getPersistenceContextInternal();
193-
final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( loaded );
194-
final EntityEntry entry = lazyInitializer != null
185+
final var persistenceContext = session.getPersistenceContextInternal();
186+
final var lazyInitializer = HibernateProxy.extractLazyInitializer( loaded );
187+
final var entry = lazyInitializer != null
195188
? persistenceContext.getEntry( lazyInitializer.getImplementation() )
196189
: persistenceContext.getEntry( loaded );
197190
assert entry != null;

hibernate-core/src/main/java/org/hibernate/loader/internal/CacheLoadHelper.java

Lines changed: 92 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,19 @@
88
import org.hibernate.LockMode;
99
import org.hibernate.LockOptions;
1010
import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor;
11-
import org.hibernate.cache.spi.access.CollectionDataAccess;
12-
import org.hibernate.cache.spi.access.EntityDataAccess;
1311
import org.hibernate.cache.spi.entry.CacheEntry;
1412
import org.hibernate.cache.spi.entry.CollectionCacheEntry;
1513
import org.hibernate.cache.spi.entry.ReferenceCacheEntryImpl;
1614
import org.hibernate.cache.spi.entry.StandardCacheEntryImpl;
1715
import org.hibernate.collection.spi.PersistentCollection;
1816
import org.hibernate.engine.internal.TwoPhaseLoad;
1917
import org.hibernate.engine.spi.EntityEntry;
20-
import org.hibernate.engine.spi.EntityHolder;
2118
import org.hibernate.engine.spi.EntityKey;
22-
import org.hibernate.engine.spi.PersistenceContext;
23-
import org.hibernate.engine.spi.PersistentAttributeInterceptor;
24-
import org.hibernate.engine.spi.SessionFactoryImplementor;
2519
import org.hibernate.engine.spi.SharedSessionContractImplementor;
2620
import org.hibernate.engine.spi.Status;
2721
import org.hibernate.event.spi.LoadEventListener;
28-
import org.hibernate.metamodel.model.domain.NavigableRole;
2922
import org.hibernate.persister.collection.CollectionPersister;
3023
import org.hibernate.persister.entity.EntityPersister;
31-
import org.hibernate.proxy.LazyInitializer;
32-
import org.hibernate.stat.spi.StatisticsImplementor;
3324
import org.hibernate.type.Type;
3425
import org.hibernate.type.TypeHelper;
3526

@@ -77,32 +68,46 @@ private CacheLoadHelper() {
7768
*
7869
* @throws HibernateException Generally indicates problems applying a lock mode.
7970
*/
80-
public static PersistenceContextEntry loadFromSessionCache(EntityKey keyToLoad, LockOptions lockOptions, LoadEventListener.LoadType options, SharedSessionContractImplementor session) {
71+
public static PersistenceContextEntry loadFromSessionCache(
72+
EntityKey keyToLoad,
73+
LockOptions lockOptions,
74+
LoadEventListener.LoadType options,
75+
SharedSessionContractImplementor session) {
8176
final Object old = session.getEntityUsingInterceptor( keyToLoad );
82-
PersistenceContextEntry.EntityStatus entityStatus = MANAGED;
77+
final PersistenceContextEntry.EntityStatus entityStatus;
8378
if ( old != null ) {
8479
// this object was already loaded
85-
final EntityEntry oldEntry = session.getPersistenceContext().getEntry( old );
80+
final var oldEntry = session.getPersistenceContext().getEntry( old );
8681
entityStatus = entityStatus( keyToLoad, options, session, oldEntry, old );
8782
if ( entityStatus == MANAGED ) {
8883
upgradeLock( old, oldEntry, lockOptions, session );
8984
}
9085
}
86+
else {
87+
entityStatus = MANAGED;
88+
}
9189
return new PersistenceContextEntry( old, entityStatus );
9290
}
9391

9492
// Used by Hibernate Reactive
95-
public static PersistenceContextEntry.EntityStatus entityStatus(EntityKey keyToLoad, LoadEventListener.LoadType options, SharedSessionContractImplementor session, EntityEntry oldEntry, Object old) {
93+
public static PersistenceContextEntry.EntityStatus entityStatus(
94+
EntityKey keyToLoad,
95+
LoadEventListener.LoadType options,
96+
SharedSessionContractImplementor session,
97+
EntityEntry oldEntry,
98+
Object old) {
9699
if ( options.isCheckDeleted() && oldEntry.getStatus().isDeletedOrGone() ) {
97100
LOADING_LOGGER.foundEntityScheduledForRemoval();
98101
return REMOVED_ENTITY_MARKER;
99102
}
100-
if ( options.isAllowNulls() && !session.getFactory().getMappingMetamodel()
103+
else if ( options.isAllowNulls() && !session.getFactory().getMappingMetamodel()
101104
.getEntityDescriptor( keyToLoad.getEntityName() ).isInstance( old ) ) {
102105
LOADING_LOGGER.foundEntityWrongType();
103106
return INCONSISTENT_RTN_CLASS_MARKER;
104107
}
105-
return MANAGED;
108+
else {
109+
return MANAGED;
110+
}
106111
}
107112

108113
/**
@@ -127,9 +132,8 @@ public static Object loadFromSecondLevelCache(
127132
&& source.getCacheMode().isGetEnabled()
128133
&& lockMode.lessThan( LockMode.READ );
129134
if ( useCache ) {
130-
final Object ce = getFromSharedCache( entityKey.getIdentifier(), persister, source );
131-
// nothing was found in cache
132-
return ce == null ? null : processCachedEntry( entity, persister, ce, source, entityKey );
135+
final Object cacheEntry = getFromSharedCache( entityKey.getIdentifier(), persister, source );
136+
return cacheEntry == null ? null : processCachedEntry( entity, persister, cacheEntry, source, entityKey );
133137
}
134138
else {
135139
// we can't use cache here
@@ -140,38 +144,33 @@ public static Object loadFromSecondLevelCache(
140144
private static Object getFromSharedCache(
141145
final Object entityId,
142146
final EntityPersister persister,
143-
SharedSessionContractImplementor source) {
144-
final EntityDataAccess cache = persister.getCacheAccessStrategy();
145-
final SessionFactoryImplementor factory = source.getFactory();
146-
final Object cacheKey = cache.generateCacheKey(
147-
entityId,
148-
persister,
149-
factory,
150-
source.getTenantIdentifier()
151-
);
152-
final Object ce = fromSharedCache( source, cacheKey, persister, persister.getCacheAccessStrategy() );
153-
final StatisticsImplementor statistics = factory.getStatistics();
147+
final SharedSessionContractImplementor source) {
148+
final var cache = persister.getCacheAccessStrategy();
149+
final var factory = source.getFactory();
150+
final Object cacheKey = cache.generateCacheKey( entityId, persister, factory, source.getTenantIdentifier() );
151+
final Object cacheEntry = fromSharedCache( source, cacheKey, persister, persister.getCacheAccessStrategy() );
152+
final var statistics = factory.getStatistics();
154153
if ( statistics.isStatisticsEnabled() ) {
155-
final NavigableRole rootEntityRole = getRootEntityRole( persister );
154+
final var rootEntityRole = getRootEntityRole( persister );
156155
final String regionName = cache.getRegion().getName();
157-
if ( ce == null ) {
156+
if ( cacheEntry == null ) {
158157
statistics.entityCacheMiss( rootEntityRole, regionName );
159158
}
160159
else {
161160
statistics.entityCacheHit( rootEntityRole, regionName );
162161
}
163162
}
164-
return ce;
163+
return cacheEntry;
165164
}
166165

167166
private static Object processCachedEntry(
168167
final Object instanceToLoad,
169168
final EntityPersister persister,
170-
final Object ce,
169+
final Object cacheEntry,
171170
final SharedSessionContractImplementor source,
172171
final EntityKey entityKey) {
173-
final CacheEntry entry = (CacheEntry)
174-
persister.getCacheEntryStructure().destructure( ce, source.getFactory() );
172+
final var entry = (CacheEntry)
173+
persister.getCacheEntryStructure().destructure( cacheEntry, source.getFactory() );
175174
if ( entry.isReferenceEntry() ) {
176175
if ( instanceToLoad != null ) {
177176
throw new HibernateException( "Attempt to load entity from cache using provided object instance, "
@@ -192,8 +191,8 @@ private static Object processCachedEntry(
192191
entityKey
193192
);
194193
if ( !persister.isInstance( entity ) ) {
195-
// Cleanup the inconsistent return class entity from the persistence context
196-
final PersistenceContext persistenceContext = source.getPersistenceContext();
194+
// Clean up the inconsistent return class entity from the persistence context
195+
final var persistenceContext = source.getPersistenceContext();
197196
persistenceContext.removeEntry( entity );
198197
persistenceContext.removeEntity( entityKey );
199198
return null;
@@ -222,12 +221,10 @@ private static void makeEntityCircularReferenceSafe(
222221
Object entity,
223222
EntityKey entityKey) {
224223
// make it circular-reference safe
225-
final PersistenceContext persistenceContext = session.getPersistenceContext();
224+
final var persistenceContext = session.getPersistenceContext();
226225
if ( isManagedEntity( entity ) ) {
227-
final EntityHolder entityHolder =
228-
persistenceContext.addEntityHolder( entityKey, entity );
229-
final EntityEntry entityEntry =
230-
persistenceContext.addReferenceEntry( entity, Status.READ_ONLY );
226+
final var entityHolder = persistenceContext.addEntityHolder( entityKey, entity );
227+
final var entityEntry = persistenceContext.addReferenceEntry( entity, Status.READ_ONLY );
231228
entityHolder.setEntityEntry( entityEntry );
232229
}
233230
else {
@@ -251,30 +248,26 @@ private static Object convertCacheEntryToEntity(
251248
Object instanceToLoad,
252249
EntityKey entityKey) {
253250

254-
final EntityPersister subclassPersister =
251+
final var subclassPersister =
255252
source.getFactory().getMappingMetamodel()
256253
.getEntityDescriptor( entry.getSubclass() );
257-
final PersistenceContext persistenceContext = source.getPersistenceContextInternal();
258-
final EntityHolder oldHolder = persistenceContext.getEntityHolder( entityKey );
254+
final var persistenceContext = source.getPersistenceContextInternal();
255+
final var oldHolder = persistenceContext.getEntityHolder( entityKey );
259256

260257
final Object entity;
261258
if ( instanceToLoad != null ) {
262259
entity = instanceToLoad;
263260
}
264261
else {
265-
if ( oldHolder != null && oldHolder.getEntity() != null ) {
266-
// Use the entity which might already be
267-
entity = oldHolder.getEntity();
268-
}
269-
else {
270-
entity = source.instantiate( subclassPersister, entityId );
271-
}
262+
entity = oldHolder != null && oldHolder.getEntity() != null
263+
? oldHolder.getEntity()
264+
: source.instantiate( subclassPersister, entityId );
272265
}
273266

274267
if ( isPersistentAttributeInterceptable( entity ) ) {
275-
PersistentAttributeInterceptor persistentAttributeInterceptor =
268+
final var persistentAttributeInterceptor =
276269
asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
277-
// if we do this after the entity has been initialized the
270+
// if we do this after the entity has been initialized, the
278271
// BytecodeLazyAttributeInterceptor#isAttributeLoaded(String fieldName)
279272
// would return false
280273
if ( persistentAttributeInterceptor == null
@@ -285,13 +278,13 @@ private static Object convertCacheEntryToEntity(
285278
}
286279

287280
// make it circular-reference safe
288-
final EntityHolder holder = persistenceContext.addEntityHolder( entityKey, entity );
281+
final var holder = persistenceContext.addEntityHolder( entityKey, entity );
289282
final Object proxy = holder.getProxy();
290283
final boolean isReadOnly;
291284
if ( proxy != null ) {
292285
// there is already a proxy for this impl
293286
// only set the status to read-only if the proxy is read-only
294-
final LazyInitializer lazyInitializer = extractLazyInitializer( proxy );
287+
final var lazyInitializer = extractLazyInitializer( proxy );
295288
assert lazyInitializer != null;
296289
lazyInitializer.setImplementation( entity );
297290
isReadOnly = lazyInitializer.isReadOnly();
@@ -316,7 +309,7 @@ private static Object convertCacheEntryToEntity(
316309

317310
final Type[] types = subclassPersister.getPropertyTypes();
318311
// initializes the entity by (desired) side effect
319-
final StandardCacheEntryImpl standardCacheEntry = (StandardCacheEntryImpl) entry;
312+
final var standardCacheEntry = (StandardCacheEntryImpl) entry;
320313
final Object[] values = standardCacheEntry.assemble(
321314
entity,
322315
entityId,
@@ -334,7 +327,7 @@ private static Object convertCacheEntryToEntity(
334327
);
335328
}
336329
final Object version = getVersion( values, subclassPersister );
337-
final EntityEntry entityEntry = persistenceContext.addEntry(
330+
final var entityEntry = persistenceContext.addEntry(
338331
entity,
339332
isReadOnly ? Status.READ_ONLY : Status.MANAGED,
340333
values,
@@ -346,9 +339,7 @@ private static Object convertCacheEntryToEntity(
346339
subclassPersister,
347340
false
348341
);
349-
holder.setEntityEntry(
350-
entityEntry
351-
);
342+
holder.setEntityEntry( entityEntry );
352343
subclassPersister.afterInitialize( entity, source );
353344
entityEntry.postLoad( entity );
354345
persistenceContext.initializeNonLazyCollections();
@@ -372,43 +363,58 @@ public static boolean initializeCollectionFromCache(
372363
CollectionPersister persister,
373364
PersistentCollection<?> collection,
374365
SharedSessionContractImplementor source) {
375-
376366
if ( persister.hasCache() && source.getCacheMode().isGetEnabled() ) {
377-
final SessionFactoryImplementor factory = source.getFactory();
378-
final CollectionDataAccess cacheAccessStrategy = persister.getCacheAccessStrategy();
379-
final Object ck = cacheAccessStrategy.generateCacheKey( key, persister, factory, source.getTenantIdentifier() );
380-
final Object ce = fromSharedCache( source, ck, persister, cacheAccessStrategy );
381-
382-
final StatisticsImplementor statistics = factory.getStatistics();
383-
if ( statistics.isStatisticsEnabled() ) {
384-
final NavigableRole navigableRole = persister.getNavigableRole();
385-
final String regionName = cacheAccessStrategy.getRegion().getName();
386-
if ( ce == null ) {
387-
statistics.collectionCacheMiss( navigableRole, regionName );
388-
}
389-
else {
390-
statistics.collectionCacheHit( navigableRole, regionName );
391-
}
392-
}
393-
394-
if ( ce == null ) {
367+
final Object cachedEntry = getFromSharedCache( key, persister, source );
368+
if ( cachedEntry == null ) {
395369
return false;
396370
}
397371
else {
398-
final CollectionCacheEntry cacheEntry = (CollectionCacheEntry)
399-
persister.getCacheEntryStructure().destructure( ce, factory );
400-
final PersistenceContext persistenceContext = source.getPersistenceContextInternal();
401-
cacheEntry.assemble( collection, persister, persistenceContext.getCollectionOwner( key, persister ) );
402-
persistenceContext.getCollectionEntry( collection ).postInitialize( collection, source );
403-
// addInitializedCollection(collection, persister, key);
372+
processCachedEntry( key, persister, cachedEntry, collection, source );
404373
return true;
405374
}
406375
}
407376
else {
377+
// we can't use cache here
408378
return false;
409379
}
410380
}
411381

382+
private static void processCachedEntry(
383+
Object key,
384+
CollectionPersister persister,
385+
Object cachedEntry,
386+
PersistentCollection<?> collection,
387+
SharedSessionContractImplementor source) {
388+
final var cacheEntry = (CollectionCacheEntry)
389+
persister.getCacheEntryStructure().destructure( cachedEntry, source.getFactory() );
390+
final var persistenceContext = source.getPersistenceContextInternal();
391+
cacheEntry.assemble( collection, persister, persistenceContext.getCollectionOwner( key, persister ) );
392+
persistenceContext.getCollectionEntry( collection ).postInitialize( collection, source );
393+
// addInitializedCollection(collection, persister, key);
394+
}
395+
396+
private static Object getFromSharedCache(
397+
Object key,
398+
CollectionPersister persister,
399+
SharedSessionContractImplementor source) {
400+
final var factory = source.getFactory();
401+
final var cache = persister.getCacheAccessStrategy();
402+
final Object cacheKey = cache.generateCacheKey( key, persister, factory, source.getTenantIdentifier() );
403+
final Object cachedEntry = fromSharedCache( source, cacheKey, persister, cache );
404+
final var statistics = factory.getStatistics();
405+
if ( statistics.isStatisticsEnabled() ) {
406+
final var navigableRole = persister.getNavigableRole();
407+
final String regionName = cache.getRegion().getName();
408+
if ( cachedEntry == null ) {
409+
statistics.collectionCacheMiss( navigableRole, regionName );
410+
}
411+
else {
412+
statistics.collectionCacheHit( navigableRole, regionName );
413+
}
414+
}
415+
return cachedEntry;
416+
}
417+
412418
public record PersistenceContextEntry(Object entity, EntityStatus status) {
413419
public enum EntityStatus {
414420
MANAGED,

0 commit comments

Comments
 (0)