diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/EffectiveEntityGraph.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/EffectiveEntityGraph.java index 998456c14327..e7dd5208a35b 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/EffectiveEntityGraph.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/EffectiveEntityGraph.java @@ -74,7 +74,7 @@ public EffectiveEntityGraph(boolean allowOverwrite) { * @throws IllegalArgumentException Thrown if the semantic is null * @throws IllegalStateException If previous state is still available (hasn't been cleared). */ - public void applyGraph(RootGraphImplementor graph, @Nullable GraphSemantic semantic) { + public void applyGraph(RootGraphImplementor graph, GraphSemantic semantic) { if ( semantic == null ) { throw new IllegalArgumentException( "Graph semantic cannot be null" ); } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/LoadQueryInfluencers.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/LoadQueryInfluencers.java index 926cb2b49f30..885ef4f0e000 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/LoadQueryInfluencers.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/LoadQueryInfluencers.java @@ -83,7 +83,7 @@ public LoadQueryInfluencers(SessionFactoryImplementor sessionFactory, SessionCre } } - public EffectiveEntityGraph applyEntityGraph(@Nullable RootGraphImplementor rootGraph, @Nullable GraphSemantic graphSemantic) { + public EffectiveEntityGraph applyEntityGraph(RootGraphImplementor rootGraph, GraphSemantic graphSemantic) { final var effectiveEntityGraph = getEffectiveEntityGraph(); if ( graphSemantic != null ) { if ( rootGraph == null ) { diff --git a/hibernate-core/src/main/java/org/hibernate/internal/MultiIdentifierLoadAccessImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/MultiIdentifierLoadAccessImpl.java index c2c3d43304be..10aa7fe974b0 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/MultiIdentifierLoadAccessImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/MultiIdentifierLoadAccessImpl.java @@ -15,8 +15,6 @@ import org.hibernate.RemovalsMode; import org.hibernate.SessionCheckMode; import org.hibernate.UnknownProfileException; -import org.hibernate.engine.spi.EffectiveEntityGraph; -import org.hibernate.engine.spi.LoadQueryInfluencers; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.graph.GraphSemantic; @@ -170,7 +168,7 @@ public List multiLoad(K... ids) { } public List perform(Supplier> executor) { - final CacheMode sessionCacheMode = session.getCacheMode(); + final var sessionCacheMode = session.getCacheMode(); boolean cacheModeChanged = false; if ( cacheMode != null ) { // naive check for now... @@ -182,16 +180,20 @@ public List perform(Supplier> executor) { } try { - final LoadQueryInfluencers influencers = session.getLoadQueryInfluencers(); - final HashSet fetchProfiles = + final var influencers = session.getLoadQueryInfluencers(); + final var fetchProfiles = influencers.adjustFetchProfiles( disabledFetchProfiles, enabledFetchProfiles ); - final EffectiveEntityGraph effectiveEntityGraph = - influencers.applyEntityGraph( rootGraph, graphSemantic ); + final var effectiveEntityGraph = + rootGraph == null + ? null + : influencers.applyEntityGraph( rootGraph, graphSemantic ); try { return executor.get(); } finally { - effectiveEntityGraph.clear(); + if ( effectiveEntityGraph != null ) { + effectiveEntityGraph.clear(); + } influencers.setEnabledFetchProfileNames( fetchProfiles ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/internal/NaturalIdMultiLoadAccessStandard.java b/hibernate-core/src/main/java/org/hibernate/internal/NaturalIdMultiLoadAccessStandard.java index f6be988fca2c..526f96602515 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/NaturalIdMultiLoadAccessStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/NaturalIdMultiLoadAccessStandard.java @@ -16,8 +16,6 @@ import org.hibernate.NaturalIdMultiLoadAccess; import org.hibernate.OrderingMode; import org.hibernate.RemovalsMode; -import org.hibernate.engine.spi.EffectiveEntityGraph; -import org.hibernate.engine.spi.LoadQueryInfluencers; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.graph.GraphSemantic; import org.hibernate.graph.spi.RootGraphImplementor; @@ -121,12 +119,12 @@ public List multiLoad(Object... ids) { } } - final LoadQueryInfluencers loadQueryInfluencers = session.getLoadQueryInfluencers(); + final var loadQueryInfluencers = session.getLoadQueryInfluencers(); try { - final EffectiveEntityGraph effectiveEntityGraph = loadQueryInfluencers.getEffectiveEntityGraph(); - final GraphSemantic initialGraphSemantic = effectiveEntityGraph.getSemantic(); - final RootGraphImplementor initialGraph = effectiveEntityGraph.getGraph(); + final var effectiveEntityGraph = loadQueryInfluencers.getEffectiveEntityGraph(); + final var initialGraphSemantic = effectiveEntityGraph.getSemantic(); + final var initialGraph = effectiveEntityGraph.getGraph(); final boolean hadInitialGraph = initialGraphSemantic != null; if ( graphSemantic != null ) { @@ -137,7 +135,9 @@ public List multiLoad(Object... ids) { } try { - return (List) entityDescriptor.getMultiNaturalIdLoader().multiLoad( ids, this, session ); + return (List) + entityDescriptor.getMultiNaturalIdLoader() + .multiLoad( ids, this, session ); } finally { if ( graphSemantic != null ) { diff --git a/hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java b/hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java index b5d76d4f4687..14685b1c9ba7 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java @@ -174,19 +174,21 @@ protected final T doLoad(Object normalizedNaturalIdValue) { final var session = context.getSession(); final var influencers = session.getLoadQueryInfluencers(); final var fetchProfiles = influencers.adjustFetchProfiles( disabledFetchProfiles, enabledFetchProfiles ); - final var effectiveEntityGraph = influencers.applyEntityGraph( rootGraph, graphSemantic ); + final var effectiveEntityGraph = + rootGraph == null + ? null + : influencers.applyEntityGraph( rootGraph, graphSemantic ); try { @SuppressWarnings("unchecked") final T loaded = cachedResolution != null - ? identifierLoadAccess().load(cachedResolution) + ? identifierLoadAccess().load( cachedResolution ) : (T) entityPersister().getNaturalIdLoader() .load( normalizedNaturalIdValue, this, session ); if ( loaded != null ) { final var persistenceContext = session.getPersistenceContextInternal(); final var lazyInitializer = HibernateProxy.extractLazyInitializer( loaded ); - final var entry = lazyInitializer != null - ? persistenceContext.getEntry( lazyInitializer.getImplementation() ) - : persistenceContext.getEntry( loaded ); + final var entity = lazyInitializer != null ? lazyInitializer.getImplementation() : loaded; + final var entry = persistenceContext.getEntry( entity ); assert entry != null; if ( entry.getStatus() == Status.DELETED ) { return null; @@ -196,7 +198,9 @@ protected final T doLoad(Object normalizedNaturalIdValue) { } finally { context.delayedAfterCompletion(); - effectiveEntityGraph.clear(); + if ( effectiveEntityGraph != null ) { + effectiveEntityGraph.clear(); + } influencers.setEnabledFetchProfileNames( fetchProfiles ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/loader/internal/IdentifierLoadAccessImpl.java b/hibernate-core/src/main/java/org/hibernate/loader/internal/IdentifierLoadAccessImpl.java index 5ab14cfcebab..f8d38d956b43 100644 --- a/hibernate-core/src/main/java/org/hibernate/loader/internal/IdentifierLoadAccessImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/loader/internal/IdentifierLoadAccessImpl.java @@ -121,12 +121,17 @@ protected T perform(Supplier executor) { try { final var influencers = session.getLoadQueryInfluencers(); final var fetchProfiles = influencers.adjustFetchProfiles( disabledFetchProfiles, enabledFetchProfiles ); - final var effectiveEntityGraph = influencers.applyEntityGraph( rootGraph, graphSemantic); + final var effectiveEntityGraph = + rootGraph == null + ? null + : influencers.applyEntityGraph( rootGraph, graphSemantic); try { return executor.get(); } finally { - effectiveEntityGraph.clear(); + if ( effectiveEntityGraph != null ) { + effectiveEntityGraph.clear(); + } influencers.setEnabledFetchProfileNames( fetchProfiles ); } }