diff --git a/hibernate-core/src/main/java/org/hibernate/collection/spi/AbstractPersistentCollection.java b/hibernate-core/src/main/java/org/hibernate/collection/spi/AbstractPersistentCollection.java index 8325b338afe5..bd59a86ffff7 100644 --- a/hibernate-core/src/main/java/org/hibernate/collection/spi/AbstractPersistentCollection.java +++ b/hibernate-core/src/main/java/org/hibernate/collection/spi/AbstractPersistentCollection.java @@ -24,7 +24,6 @@ import org.hibernate.engine.spi.CollectionEntry; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.Status; import org.hibernate.engine.spi.TypedValue; @@ -33,15 +32,14 @@ import org.hibernate.internal.SessionFactoryRegistry; import org.hibernate.internal.util.MarkerObject; import org.hibernate.internal.util.collections.IdentitySet; -import org.hibernate.metamodel.mapping.EntityIdentifierMapping; import org.hibernate.persister.collection.CollectionPersister; -import org.hibernate.resource.transaction.spi.TransactionStatus; import org.hibernate.type.BasicType; import org.hibernate.type.CompositeType; import org.hibernate.type.Type; import org.checkerframework.checker.nullness.qual.Nullable; +import static java.util.Collections.emptyList; import static org.hibernate.engine.internal.ForeignKeys.getEntityIdentifier; import static org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved; import static org.hibernate.engine.internal.ForeignKeys.isNotTransient; @@ -148,6 +146,11 @@ protected final void read() { initialize( false ); } + private CollectionEntry getCollectionEntry() { + return session.getPersistenceContextInternal() + .getCollectionEntry( this ); + } + /** * Called by the {@link Collection#size} method */ @@ -159,10 +162,9 @@ protected boolean readSize() { else { return withTemporarySessionIfNeeded( () -> { - final CollectionEntry entry = - session.getPersistenceContextInternal().getCollectionEntry( this ); + final var entry = getCollectionEntry(); if ( entry != null ) { - final CollectionPersister persister = entry.getLoadedPersister(); + final var persister = entry.getLoadedPersister(); checkPersister( this, persister ); if ( persister.isExtraLazy() ) { // TODO: support for extra-lazy collections was @@ -193,7 +195,7 @@ public int getSize() { return cachedSize; } else { - final CollectionEntry entry = session.getPersistenceContextInternal().getCollectionEntry( this ); + final var entry = getCollectionEntry(); if ( entry == null ) { throwLazyInitializationExceptionIfNotConnected(); throwLazyInitializationException( "collection not associated with session" ); @@ -273,8 +275,8 @@ else if ( !session.isConnected() ) { session.beginTransaction(); } - final CollectionPersister collectionDescriptor = - session.getSessionFactory().getMappingMetamodel() + final var collectionDescriptor = + session.getFactory().getMappingMetamodel() .getCollectionDescriptor( getRole() ); session.getPersistenceContextInternal() .addUninitializedDetachedCollection( collectionDescriptor, this ); @@ -309,7 +311,7 @@ else if ( !session.isConnected() ) { } private boolean unfinishedLoading() { - final PersistenceContext persistenceContext = session.getPersistenceContext(); + final var persistenceContext = session.getPersistenceContext(); return persistenceContext.hasLoadContext() && !persistenceContext.getLoadContexts().isLoadingFinished(); } @@ -319,8 +321,7 @@ private SharedSessionContractImplementor openTemporarySessionForLoading() { throwLazyInitializationException( "SessionFactory UUID not known; cannot create temporary session for loading" ); } - final SessionImplementor session = - SessionFactoryRegistry.INSTANCE.getSessionFactory( sessionFactoryUuid ).openSession(); + final var session = SessionFactoryRegistry.INSTANCE.getSessionFactory( sessionFactoryUuid ).openSession(); session.getPersistenceContextInternal().setDefaultReadOnly( true ); session.setHibernateFlushMode( FlushMode.MANUAL ); return session; @@ -330,8 +331,8 @@ protected Boolean readIndexExistence(final Object index) { if ( !initialized ) { return withTemporarySessionIfNeeded( () -> { - final CollectionEntry entry = session.getPersistenceContextInternal().getCollectionEntry( this ); - final CollectionPersister persister = entry.getLoadedPersister(); + final var entry = getCollectionEntry(); + final var persister = entry.getLoadedPersister(); checkPersister( this, persister ); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { @@ -353,8 +354,8 @@ protected Boolean readElementExistence(final Object element) { if ( !initialized ) { return withTemporarySessionIfNeeded( () -> { - final CollectionEntry entry = session.getPersistenceContextInternal().getCollectionEntry( this ); - final CollectionPersister persister = entry.getLoadedPersister(); + final var entry = getCollectionEntry(); + final var persister = entry.getLoadedPersister(); checkPersister( this, persister ); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { @@ -374,7 +375,7 @@ protected Boolean readElementExistence(final Object element) { @Override public boolean elementExists(Object element) { - final CollectionEntry entry = session.getPersistenceContextInternal().getCollectionEntry( this ); + final var entry = getCollectionEntry(); if ( entry == null ) { throwLazyInitializationExceptionIfNotConnected(); throwLazyInitializationException( "collection not associated with session" ); @@ -384,7 +385,8 @@ public boolean elementExists(Object element) { if ( hasQueuedOperations() ) { session.flush(); } - return entry.getLoadedPersister().elementExists( entry.getLoadedKey(), element, session ); + return entry.getLoadedPersister() + .elementExists( entry.getLoadedKey(), element, session ); } } @@ -398,10 +400,8 @@ class ExtraLazyElementByIndexReader implements LazyInitializationWork { @Override public Object doWork() { - final CollectionEntry entry = - session.getPersistenceContextInternal() - .getCollectionEntry( AbstractPersistentCollection.this ); - final CollectionPersister persister = entry.getLoadedPersister(); + final var entry = getCollectionEntry(); + final var persister = entry.getLoadedPersister(); checkPersister( AbstractPersistentCollection.this, persister ); isExtraLazy = persister.isExtraLazy(); if ( isExtraLazy ) { @@ -429,7 +429,7 @@ public Object doWork() { @Override public Object elementByIndex(Object index) { - final CollectionEntry entry = session.getPersistenceContextInternal().getCollectionEntry( this ); + final var entry = getCollectionEntry(); if ( entry == null ) { throwLazyInitializationExceptionIfNotConnected(); throwLazyInitializationException( "collection not associated with session" ); @@ -439,7 +439,8 @@ public Object elementByIndex(Object index) { if ( hasQueuedOperations() ) { session.flush(); } - return entry.getLoadedPersister().getElementByIndex( entry.getLoadedKey(), index, session, owner ); + return entry.getLoadedPersister() + .getElementByIndex( entry.getLoadedKey(), index, session, owner ); } } @@ -501,8 +502,8 @@ && isConnectedToSession() * Is this the "inverse" end of a bidirectional association? */ protected boolean isInverseCollection() { - final CollectionEntry ce = session.getPersistenceContextInternal().getCollectionEntry( this ); - return ce != null && ce.getLoadedPersister().isInverse(); + final var entry = getCollectionEntry(); + return entry != null && entry.getLoadedPersister().isInverse(); } /** @@ -510,12 +511,15 @@ protected boolean isInverseCollection() { * no orphan delete enabled? */ protected boolean isInverseCollectionNoOrphanDelete() { - final CollectionEntry ce = session.getPersistenceContextInternal().getCollectionEntry( this ); - if ( ce == null ) { + final var entry = getCollectionEntry(); + if ( entry == null ) { return false; } - final CollectionPersister loadedPersister = ce.getLoadedPersister(); - return loadedPersister.isInverse() && !loadedPersister.hasOrphanDelete(); + else { + final var loadedPersister = entry.getLoadedPersister(); + return loadedPersister.isInverse() + && !loadedPersister.hasOrphanDelete(); + } } /** @@ -523,12 +527,15 @@ protected boolean isInverseCollectionNoOrphanDelete() { * of a collection with no orphan delete? */ protected boolean isInverseOneToManyOrNoOrphanDelete() { - final CollectionEntry ce = session.getPersistenceContextInternal().getCollectionEntry( this ); - if ( ce == null ) { + final var entry = getCollectionEntry(); + if ( entry == null ) { return false; } - final CollectionPersister loadedPersister = ce.getLoadedPersister(); - return loadedPersister.isInverse() && ( loadedPersister.isOneToMany() || !loadedPersister.hasOrphanDelete() ); + else { + final var loadedPersister = entry.getLoadedPersister(); + return loadedPersister.isInverse() + && ( loadedPersister.isOneToMany() || !loadedPersister.hasOrphanDelete() ); + } } /** @@ -550,7 +557,7 @@ protected final void queueOperation(DelayedOperation operation) { * merged to managed copy. */ public final void replaceQueuedOperationValues(CollectionPersister persister, Map copyCache) { - for ( DelayedOperation operation : operationQueue ) { + for ( var operation : operationQueue ) { if ( operation instanceof ValueDelayedOperation valueDelayedOperation ) { valueDelayedOperation.replace( persister, copyCache ); } @@ -660,7 +667,7 @@ private static void throwLazyInitializationException(String role, String message ); } - public static void checkPersister(PersistentCollection collection, CollectionPersister persister) { + public static void checkPersister(PersistentCollection collection, CollectionPersister persister) { if ( !collection.wasInitialized() && persister == null ) { throwLazyInitializationException( null, "collection is being removed" ); } @@ -732,19 +739,19 @@ private void logDiscardedQueuedOperations() { } private boolean wasTransactionRolledBack() { - final TransactionStatus status = - session.getTransactionCoordinator().getTransactionDriverControl().getStatus(); - return status.isOneOf( ROLLED_BACK, MARKED_ROLLBACK, FAILED_COMMIT, FAILED_ROLLBACK, ROLLING_BACK ); + return session.getTransactionCoordinator().getTransactionDriverControl().getStatus() + .isOneOf( ROLLED_BACK, MARKED_ROLLBACK, FAILED_COMMIT, FAILED_ROLLBACK, ROLLING_BACK ); } protected void prepareForPossibleLoadingOutsideTransaction() { if ( session != null ) { + final var factory = session.getFactory(); allowLoadOutsideTransaction = - session.getFactory().getSessionFactoryOptions() + factory.getSessionFactoryOptions() .isInitializeLazyStateOutsideTransactionsEnabled(); if ( allowLoadOutsideTransaction && sessionFactoryUuid == null ) { - sessionFactoryUuid = session.getFactory().getUuid(); + sessionFactoryUuid = factory.getUuid(); } } } @@ -755,14 +762,14 @@ public final boolean setCurrentSession(SharedSessionContractImplementor session) return false; } else if ( this.session != null ) { - final String msg = unexpectedSessionStateMessage( session ); + final String message = unexpectedSessionStateMessage( session ); if ( isConnectedToSession() ) { throw new HibernateException( - "Illegal attempt to associate a collection with two open sessions: " + msg + "Illegal attempt to associate a collection with two open sessions: " + message ); } else { - LOG.logUnexpectedSessionInCollectionNotConnected( msg ); + LOG.logUnexpectedSessionInCollectionNotConnected( message ); } } if ( hasQueuedOperations() ) { @@ -784,14 +791,14 @@ private String unexpectedSessionStateMessage(SharedSessionContractImplementor se final String roleCurrent = role; final Object keyCurrent = key; - final StringBuilder message = new StringBuilder( "Collection : " ); + final var message = new StringBuilder( "Collection : " ); if ( roleCurrent != null ) { message.append( collectionInfoString( roleCurrent, keyCurrent ) ); } else { - final CollectionEntry ce = session.getPersistenceContextInternal().getCollectionEntry( this ); - if ( ce != null ) { - message.append( collectionInfoString( ce.getLoadedPersister(), this, ce.getLoadedKey(), session ) ); + final var entry = session.getPersistenceContextInternal().getCollectionEntry( this ); + if ( entry != null ) { + message.append( collectionInfoString( entry.getLoadedPersister(), this, entry.getLoadedKey(), session ) ); } else { message.append( "" ); @@ -818,9 +825,10 @@ public boolean needsRecreate(CollectionPersister persister) { // Selecting a type used in where part of update statement // (must match condition in org.hibernate.persister.collection.BasicCollectionPersister#doUpdateRows). // See HHH-9474 - final Type whereType = persister.hasIndex() - ? persister.getIndexType() - : persister.getElementType(); + final Type whereType = + persister.hasIndex() + ? persister.getIndexType() + : persister.getElementType(); return whereType instanceof CompositeType compositeType && compositeType.hasNullProperty(); } @@ -890,14 +898,14 @@ public final Collection getQueuedOrphans(String entityName) { if ( hasQueuedOperations() ) { final Collection additions = new ArrayList<>( operationQueue.size() ); final Collection removals = new ArrayList<>( operationQueue.size() ); - for ( DelayedOperation operation : operationQueue ) { + for ( var operation : operationQueue ) { additions.add( operation.getAddedInstance() ); removals.add( operation.getOrphan() ); } return getOrphans( removals, additions, entityName, session ); } else { - return Collections.emptyList(); + return emptyList(); } } @@ -1364,16 +1372,16 @@ public static void identityRemove( SharedSessionContractImplementor session) { if ( entityInstance != null && isNotTransient( entityName, entityInstance, null, session ) ) { - final EntityIdentifierMapping identifierMapping = + final var identifierMapping = session.getFactory().getMappingMetamodel() .getEntityDescriptor( entityName ) .getIdentifierMapping(); final Object idOfCurrent = getEntityIdentifierIfNotUnsaved( entityName, entityInstance, session ); - final Iterator itr = list.iterator(); - while ( itr.hasNext() ) { - final Object idOfOld = getEntityIdentifierIfNotUnsaved( entityName, itr.next(), session ); + final var iterator = list.iterator(); + while ( iterator.hasNext() ) { + final Object idOfOld = getEntityIdentifierIfNotUnsaved( entityName, iterator.next(), session ); if ( identifierMapping.areEqual( idOfCurrent, idOfOld, session ) ) { - itr.remove(); + iterator.remove(); break; } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/CacheHelper.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/CacheHelper.java index 41abfb8ce4f6..e67ccc766c72 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/CacheHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/CacheHelper.java @@ -6,10 +6,7 @@ import org.hibernate.cache.MutableCacheKeyBuilder; import org.hibernate.cache.spi.access.CachedDomainDataAccess; -import org.hibernate.engine.spi.SessionEventListenerManager; import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; import org.hibernate.metamodel.mapping.JdbcMapping; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; @@ -39,11 +36,11 @@ public static Object fromSharedCache( EntityPersister persister, boolean isNaturalKey, CachedDomainDataAccess cacheAccess) { - final SessionEventListenerManager eventListenerManager = session.getEventListenerManager(); + final var eventListenerManager = session.getEventListenerManager(); Object cachedValue = null; eventListenerManager.cacheGetStart(); - final EventMonitor eventMonitor = session.getEventMonitor(); - final DiagnosticEvent cacheGetEvent = eventMonitor.beginCacheGetEvent(); + final var eventMonitor = session.getEventMonitor(); + final var cacheGetEvent = eventMonitor.beginCacheGetEvent(); try { cachedValue = cacheAccess.get( session, cacheKey ); } @@ -66,11 +63,11 @@ public static Object fromSharedCache( Object cacheKey, CollectionPersister persister, CachedDomainDataAccess cacheAccess) { - final SessionEventListenerManager eventListenerManager = session.getEventListenerManager(); + final var eventListenerManager = session.getEventListenerManager(); Object cachedValue = null; eventListenerManager.cacheGetStart(); - final EventMonitor eventMonitor = session.getEventMonitor(); - final DiagnosticEvent cacheGetEvent = eventMonitor.beginCacheGetEvent(); + final var eventMonitor = session.getEventMonitor(); + final var cacheGetEvent = eventMonitor.beginCacheGetEvent(); try { cachedValue = cacheAccess.get( session, cacheKey ); } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/Collections.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/Collections.java index d14e8cd3be47..4e98e64a2835 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/Collections.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/Collections.java @@ -10,8 +10,6 @@ import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.engine.spi.CollectionEntry; import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.spi.EventSource; @@ -46,9 +44,9 @@ public static void processUnreachableCollection(PersistentCollection coll, Se } private static void processDereferencedCollection(PersistentCollection coll, SessionImplementor session) { - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final CollectionEntry entry = persistenceContext.getCollectionEntry( coll ); - final CollectionPersister loadedPersister = entry.getLoadedPersister(); + final var persistenceContext = session.getPersistenceContextInternal(); + final var entry = persistenceContext.getCollectionEntry( coll ); + final var loadedPersister = entry.getLoadedPersister(); if ( loadedPersister != null && LOG.isTraceEnabled() ) { LOG.trace("Collection dereferenced: " @@ -59,7 +57,7 @@ private static void processDereferencedCollection(PersistentCollection coll, final boolean hasOrphanDelete = loadedPersister != null && loadedPersister.hasOrphanDelete(); if ( hasOrphanDelete ) { final Object ownerId = getOwnerId( coll, session, loadedPersister ); - final EntityKey key = session.generateEntityKey( ownerId, loadedPersister.getOwnerEntityPersister() ); + final var key = session.generateEntityKey( ownerId, loadedPersister.getOwnerEntityPersister() ); final Object owner = persistenceContext.getEntity( key ); if ( owner == null ) { throw new AssertionFailure( "collection owner not associated with session: " + loadedPersister.getRole() ); @@ -95,7 +93,7 @@ private static Object getOwnerId( // the persistence context if ( session.getFactory().getSessionFactoryOptions() .isIdentifierRollbackEnabled() ) { - final EntityEntry ownerEntry = + final var ownerEntry = session.getPersistenceContextInternal() .getEntry( coll.getOwner() ); if ( ownerEntry != null ) { @@ -111,7 +109,7 @@ private static Object getOwnerId( private static void processNeverReferencedCollection(PersistentCollection coll, SessionImplementor session) throws HibernateException { - final CollectionEntry entry = + final var entry = session.getPersistenceContextInternal() .getCollectionEntry( coll ); @@ -141,23 +139,23 @@ public static void processReachableCollection( Object entity, SessionImplementor session) { collection.setOwner( entity ); - final CollectionEntry ce = + final var entry = session.getPersistenceContextInternal() .getCollectionEntry( collection ); - if ( ce == null ) { + if ( entry == null ) { // refer to comment in StatefulPersistenceContext.addCollection() throw new HibernateException( "Found two representations of same collection: " + type.getRole() ); } - final SessionFactoryImplementor factory = session.getFactory(); - final CollectionPersister persister = + final var factory = session.getFactory(); + final var persister = factory.getMappingMetamodel() .getCollectionDescriptor( type.getRole() ); - ce.setCurrentPersister( persister ); + entry.setCurrentPersister( persister ); //TODO: better to pass the id in as an argument? - ce.setCurrentKey( type.getKeyOfOwner( entity, session ) ); + entry.setCurrentKey( type.getKeyOfOwner( entity, session ) ); final boolean isBytecodeEnhanced = persister.getOwnerEntityPersister() @@ -168,21 +166,21 @@ public static void processReachableCollection( // - skip it if ( LOG.isTraceEnabled() ) { LOG.trace( "Skipping uninitialized bytecode-lazy collection: " - + collectionInfoString( persister, collection, ce.getCurrentKey(), session ) ); + + collectionInfoString( persister, collection, entry.getCurrentKey(), session ) ); } - ce.setReached( true ); - ce.setProcessed( true ); + entry.setReached( true ); + entry.setProcessed( true ); return; } // The CollectionEntry.isReached() stuff is just to detect any silly users // who set up circular or shared references between/to collections. - if ( ce.isReached() ) { + if ( entry.isReached() ) { // We've been here before throw new HibernateException( "Found shared references to a collection: " + type.getRole() ); } - ce.setReached( true ); + entry.setReached( true ); if ( LOG.isTraceEnabled() ) { if ( collection.wasInitialized() ) { @@ -191,13 +189,13 @@ public static void processReachableCollection( collectionInfoString( persister, collection, - ce.getCurrentKey(), + entry.getCurrentKey(), session ), collectionInfoString( - ce.getLoadedPersister(), + entry.getLoadedPersister(), collection, - ce.getLoadedKey(), + entry.getLoadedKey(), session ) ); @@ -208,20 +206,20 @@ public static void processReachableCollection( collectionInfoString( persister, collection, - ce.getCurrentKey(), + entry.getCurrentKey(), session ), collectionInfoString( - ce.getLoadedPersister(), + entry.getLoadedPersister(), collection, - ce.getLoadedKey(), + entry.getLoadedKey(), session ) ); } } - prepareCollectionForUpdate( collection, ce, factory ); + prepareCollectionForUpdate( collection, entry, factory ); } /** @@ -238,8 +236,8 @@ private static void prepareCollectionForUpdate( } entry.setProcessed( true ); - final CollectionPersister loadedPersister = entry.getLoadedPersister(); - final CollectionPersister currentPersister = entry.getCurrentPersister(); + final var loadedPersister = entry.getLoadedPersister(); + final var currentPersister = entry.getCurrentPersister(); if ( loadedPersister != null || currentPersister != null ) { // it is or was referenced _somewhere_ @@ -301,9 +299,9 @@ public static boolean skipRemoval(EventSource session, CollectionPersister persi if ( persister != null // TODO: same optimization for @OneToMany @OnDelete(action=SET_NULL) && !persister.isOneToMany() && persister.isCascadeDeleteEnabled() ) { - final EntityKey entityKey = session.generateEntityKey( key, persister.getOwnerEntityPersister() ); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final EntityEntry entry = persistenceContext.getEntry( persistenceContext.getEntity( entityKey ) ); + final var entityKey = session.generateEntityKey( key, persister.getOwnerEntityPersister() ); + final var persistenceContext = session.getPersistenceContextInternal(); + final var entry = persistenceContext.getEntry( persistenceContext.getEntity( entityKey ) ); return entry == null || entry.getStatus().isDeletedOrGone(); } else { diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryContext.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryContext.java index 2bb149bf4035..1c941110d475 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryContext.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryContext.java @@ -11,7 +11,6 @@ import org.hibernate.engine.spi.ManagedEntity; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.PersistentAttributeInterceptable; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.collections.InstanceIdentityStore; @@ -94,13 +93,13 @@ public void addEntityEntry(Object entity, EntityEntry entityEntry) { // Determine the appropriate ManagedEntity instance to use based on whether the entity is enhanced or not. // Throw an exception if entity is a mutable ManagedEntity that is associated with a different // PersistenceContext. - ManagedEntity managedEntity = getAssociatedManagedEntity( entity ); + var managedEntity = getAssociatedManagedEntity( entity ); int instanceId = nextManagedEntityInstanceId(); final boolean alreadyAssociated = managedEntity != null; if ( !alreadyAssociated ) { if ( isManagedEntity( entity ) ) { - final ManagedEntity managed = asManagedEntity( entity ); + final var managed = asManagedEntity( entity ); assert managed.$$_hibernate_getInstanceId() == 0; if ( entityEntry.getPersister().isMutable() ) { managedEntity = managed; @@ -164,13 +163,14 @@ private static boolean isReferenceCachingEnabled(EntityPersister persister) { private ManagedEntity getAssociatedManagedEntity(Object entity) { if ( isManagedEntity( entity ) ) { - final ManagedEntity managedEntity = asManagedEntity( entity ); + final var managedEntity = asManagedEntity( entity ); if ( managedEntity.$$_hibernate_getEntityEntry() == null ) { // it is not associated return null; } - final EntityEntryImpl entityEntry = - (EntityEntryImpl) managedEntity.$$_hibernate_getEntityEntry(); + final var entityEntry = + (EntityEntryImpl) + managedEntity.$$_hibernate_getEntityEntry(); if ( entityEntry.getPersister().isMutable() ) { return entityEntry.getPersistenceContext() == persistenceContext @@ -210,7 +210,7 @@ private void putImmutableManagedEntity(ManagedEntity managed, int instanceId, Im private void checkNotAssociatedWithOtherPersistenceContextIfMutable(ManagedEntity managedEntity) { // we only have to check mutable managedEntity - final EntityEntryImpl entityEntry = (EntityEntryImpl) managedEntity.$$_hibernate_getEntityEntry(); + final var entityEntry = (EntityEntryImpl) managedEntity.$$_hibernate_getEntityEntry(); if ( entityEntry == null || !entityEntry.getPersister().isMutable() || entityEntry.getPersistenceContext() == null || @@ -250,7 +250,7 @@ public boolean hasEntityEntry(Object entity) { */ public EntityEntry getEntityEntry(Object entity) { // locate a ManagedEntity for the entity, but only if it is associated with the same PersistenceContext. - final ManagedEntity managedEntity = getAssociatedManagedEntity( entity ); + final var managedEntity = getAssociatedManagedEntity( entity ); // and get/return the EntityEntry from the ManagedEntry return managedEntity == null ? null @@ -267,7 +267,7 @@ public EntityEntry getEntityEntry(Object entity) { public EntityEntry removeEntityEntry(Object entity) { // locate a ManagedEntity for the entity, but only if it is associated with the same PersistenceContext. // no need to check if the entity is a ManagedEntity that is associated with a different PersistenceContext - final ManagedEntity managedEntity = getAssociatedManagedEntity( entity ); + final var managedEntity = getAssociatedManagedEntity( entity ); if ( managedEntity == null ) { // not associated with this EntityEntryContext, so nothing to do. return null; @@ -301,8 +301,8 @@ else if ( !isManagedEntity( entity ) ) { } else { // otherwise, previous or next (or both) should be non-null - final ManagedEntity previous = managedEntity.$$_hibernate_getPreviousManagedEntity(); - final ManagedEntity next = managedEntity.$$_hibernate_getNextManagedEntity(); + final var previous = managedEntity.$$_hibernate_getPreviousManagedEntity(); + final var next = managedEntity.$$_hibernate_getNextManagedEntity(); if ( previous == null ) { // we are removing head assert managedEntity == head; @@ -340,7 +340,7 @@ public Map.Entry[] reentrantSafeEntityEntries() { if ( dirty ) { reentrantSafeEntries = new EntityEntryCrossRefImpl[count]; int i = 0; - ManagedEntity managedEntity = head; + var managedEntity = head; while ( managedEntity != null ) { reentrantSafeEntries[i++] = new EntityEntryCrossRefImpl( managedEntity.$$_hibernate_getEntityInstance(), @@ -354,9 +354,9 @@ public Map.Entry[] reentrantSafeEntityEntries() { } private void processEachManagedEntity(final Consumer action) { - ManagedEntity node = head; + var node = head; while ( node != null ) { - final ManagedEntity next = node.$$_hibernate_getNextManagedEntity(); + final var next = node.$$_hibernate_getNextManagedEntity(); action.accept( node ); node = next; } @@ -367,9 +367,9 @@ private void processEachManagedEntity(final Consumer action) { // Also: we perform two operations at once, so to not iterate on the list twice; // being a linked list, multiple iterations are not cache friendly at all. private void clearAllReferencesFromManagedEntities() { - ManagedEntity nextManagedEntity = head; + var nextManagedEntity = head; while ( nextManagedEntity != null ) { - final ManagedEntity current = nextManagedEntity; + final var current = nextManagedEntity; nextManagedEntity = current.$$_hibernate_getNextManagedEntity(); Object toProcess = current.$$_hibernate_getEntityInstance(); unsetSession( asPersistentAttributeInterceptableOrNull( toProcess ) ); @@ -378,11 +378,10 @@ private void clearAllReferencesFromManagedEntities() { } private static void unsetSession(PersistentAttributeInterceptable persistentAttributeInterceptable) { - if ( persistentAttributeInterceptable != null ) { - final PersistentAttributeInterceptor interceptor = persistentAttributeInterceptable.$$_hibernate_getInterceptor(); - if ( interceptor instanceof LazyAttributeLoadingInterceptor ) { - ( (LazyAttributeLoadingInterceptor) interceptor ).unsetSession(); - } + if ( persistentAttributeInterceptable != null + && persistentAttributeInterceptable.$$_hibernate_getInterceptor() + instanceof LazyAttributeLoadingInterceptor lazinessInterceptor ) { + lazinessInterceptor.unsetSession(); } } @@ -428,7 +427,7 @@ public void downgradeLocks() { } private static void downgradeLockOnManagedEntity(final ManagedEntity node) { - final EntityEntry entityEntry = node.$$_hibernate_getEntityEntry(); + final var entityEntry = node.$$_hibernate_getEntityEntry(); if ( entityEntry != null ) { entityEntry.setLockMode( LockMode.NONE ); } @@ -448,7 +447,7 @@ public void serialize(ObjectOutputStream oos) throws IOException { return; } - ManagedEntity managedEntity = head; + var managedEntity = head; while ( managedEntity != null ) { // so we know whether or not to build a ManagedEntityImpl on deserialize oos.writeBoolean( managedEntity == managedEntity.$$_hibernate_getEntityInstance() ); @@ -478,7 +477,7 @@ public static EntityEntryContext deserialize(ObjectInputStream ois, StatefulPers final int count = ois.readInt(); log.tracef( "Starting deserialization of [%s] EntityEntry entries", count ); - final EntityEntryContext context = new EntityEntryContext( rtn ); + final var context = new EntityEntryContext( rtn ); context.count = count; context.dirty = true; @@ -499,19 +498,20 @@ public static EntityEntryContext deserialize(ObjectInputStream ois, StatefulPers entityEntryClassNameArr[j] = ois.readChar(); } - final EntityEntry entry = deserializeEntityEntry( entityEntryClassNameArr, ois, rtn ); + final var entry = deserializeEntityEntry( entityEntryClassNameArr, ois, rtn ); final int instanceId = context.nextManagedEntityInstanceId(); final ManagedEntity managedEntity; if ( isEnhanced ) { - final ManagedEntity castedEntity = asManagedEntity( entity ); + final var castedEntity = asManagedEntity( entity ); if ( entry.getPersister().isMutable() ) { managedEntity = castedEntity; } else { - managedEntity = new ImmutableManagedEntityHolder( castedEntity ); + final var holder = new ImmutableManagedEntityHolder( castedEntity ); + managedEntity = holder; if ( !isReferenceCachingEnabled( entry.getPersister() ) ) { - context.putImmutableManagedEntity( castedEntity, instanceId, (ImmutableManagedEntityHolder) managedEntity ); + context.putImmutableManagedEntity( castedEntity, instanceId, holder ); } else { context.putManagedEntity( entity, castedEntity ); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryImpl.java index 580bb05f998c..d6d2ecaa92ca 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryImpl.java @@ -10,7 +10,6 @@ import java.io.Serializable; import org.hibernate.AssertionFailure; -import org.hibernate.CustomEntityDirtinessStrategy; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.UnsupportedLockAttemptException; @@ -21,14 +20,11 @@ import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.ManagedEntity; import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; import org.hibernate.engine.spi.SelfDirtinessTracker; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.Status; import org.hibernate.internal.util.ImmutableBitSet; -import org.hibernate.metamodel.mapping.AttributeMapping; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.type.TypeHelper; @@ -153,8 +149,7 @@ private EntityEntryImpl( final boolean isBeingReplicated, final boolean mutable, final PersistenceContext persistenceContext) { - final SessionFactoryImplementor factory = - persistenceContext.getSession().getFactory(); + final var factory = persistenceContext.getSession().getFactory(); this.persister = factory == null ? null @@ -223,18 +218,18 @@ public Object[] getLoadedState() { @Override public Object[] getDeletedState() { - final EntityEntryExtraStateHolder extra = getExtraState( EntityEntryExtraStateHolder.class ); + final var extra = getExtraState( EntityEntryExtraStateHolder.class ); return extra == null ? null : extra.getDeletedState(); } @Override public void setDeletedState(Object[] deletedState) { - final EntityEntryExtraStateHolder existingExtra = getExtraState( EntityEntryExtraStateHolder.class ); + final var existingExtra = getExtraState( EntityEntryExtraStateHolder.class ); if ( existingExtra != null ) { existingExtra.setDeletedState( deletedState ); } else if ( deletedState != null ) { - final EntityEntryExtraStateHolder newExtra = new EntityEntryExtraStateHolder(); + final var newExtra = new EntityEntryExtraStateHolder(); newExtra.setDeletedState( deletedState ); addExtraState( newExtra ); } @@ -301,7 +296,7 @@ public void postUpdate(Object entity, Object[] updatedState, Object nextVersion) processIfSelfDirtinessTracker( entity, EntityEntryImpl::clearDirtyAttributes ); processIfManagedEntity( entity, EntityEntryImpl::useTracker ); - final SharedSessionContractImplementor session = getPersistenceContext().getSession(); + final var session = getPersistenceContext().getSession(); session.getFactory().getCustomEntityDirtinessStrategy() .resetDirty( entity, persister, (SessionImplementor) session ); } @@ -363,7 +358,7 @@ public Object getLoadedValue(String propertyName) { } private int propertyIndex(String propertyName) { - final AttributeMapping attributeMapping = persister.findAttributeMapping( propertyName ); + final var attributeMapping = persister.findAttributeMapping( propertyName ); return attributeMapping != null ? attributeMapping.getStateArrayPosition() : -1; } @@ -391,17 +386,15 @@ private boolean isUnequivocallyNonDirty(Object entity) { private boolean isNonDirtyViaCustomStrategy(Object entity) { if ( isPersistentAttributeInterceptable( entity ) ) { - final PersistentAttributeInterceptor interceptor = - asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor(); - if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor ) { + if ( asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor() + instanceof EnhancementAsProxyLazinessInterceptor ) { // we never have to check an uninitialized proxy return true; } } - final SessionImplementor session = (SessionImplementor) getPersistenceContext().getSession(); - final CustomEntityDirtinessStrategy customEntityDirtinessStrategy = - session.getFactory().getCustomEntityDirtinessStrategy(); + final var session = (SessionImplementor) getPersistenceContext().getSession(); + final var customEntityDirtinessStrategy = session.getFactory().getCustomEntityDirtinessStrategy(); return customEntityDirtinessStrategy.canDirtyCheck( entity, persister, session ) && !customEntityDirtinessStrategy.isDirty( entity, persister, session ); } @@ -409,9 +402,8 @@ private boolean isNonDirtyViaCustomStrategy(Object entity) { private boolean isNonDirtyViaTracker(Object entity) { final boolean uninitializedProxy; if ( isPersistentAttributeInterceptable( entity ) ) { - final PersistentAttributeInterceptor interceptor = - asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor(); - if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { + if ( asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor() + instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { return !lazinessInterceptor.hasWrittenFieldNames(); } else { diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/NaturalIdResolutionsImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/NaturalIdResolutionsImpl.java index f9227a3ae09d..1c0591af9d34 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/NaturalIdResolutionsImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/NaturalIdResolutionsImpl.java @@ -22,13 +22,10 @@ import org.hibernate.engine.spi.Resolution; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; import org.hibernate.metamodel.mapping.EntityMappingType; -import org.hibernate.metamodel.mapping.NaturalIdMapping; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.sql.results.LoadingLogger; import org.hibernate.stat.internal.StatsHelper; -import org.hibernate.stat.spi.StatisticsImplementor; import org.jboss.logging.Logger; @@ -75,7 +72,7 @@ public void cacheResolutionFromLoad(Object id, Object naturalId, EntityMappingTy id ); - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping != null ) { // 'justAddedLocally' is meant to handle the case where we would get double stats journaling // from a single load event. The first put journal would come from the natural id resolution; @@ -83,7 +80,7 @@ public void cacheResolutionFromLoad(Object id, Object naturalId, EntityMappingTy // 'put' stats incrementing. final boolean justAddedLocally = cacheResolution( id, naturalId, entityDescriptor ); if ( justAddedLocally && naturalIdMapping.getCacheAccess() != null ) { - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); manageSharedResolution( persister, id, naturalId, (Object) null, CachedNaturalIdValueSource.LOAD ); } } @@ -103,8 +100,8 @@ private boolean cacheResolutionLocally(Object id, Object naturalId, EntityMappin id ); - final EntityMappingType rootEntityDescriptor = entityDescriptor.getRootEntityDescriptor(); - final EntityResolutions previousEntry = resolutionsByEntity.get( rootEntityDescriptor ); + final var rootEntityDescriptor = entityDescriptor.getRootEntityDescriptor(); + final var previousEntry = resolutionsByEntity.get( rootEntityDescriptor ); final EntityResolutions resolutions; if ( previousEntry != null ) { resolutions = previousEntry; @@ -119,15 +116,15 @@ private boolean cacheResolutionLocally(Object id, Object naturalId, EntityMappin @Override public Object removeResolution(Object id, Object naturalId, EntityMappingType entityDescriptor) { - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); // final NaturalIdMapping naturalIdMapping = persister.getNaturalIdMapping(); validateNaturalId( persister, naturalId ); - final EntityResolutions entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); + final var entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); Object sessionCachedNaturalIdValues = null; if ( entityNaturalIdResolutionCache != null ) { - final Resolution cachedNaturalId = entityNaturalIdResolutionCache.pkToNaturalIdMap.remove( id ); + final var cachedNaturalId = entityNaturalIdResolutionCache.pkToNaturalIdMap.remove( id ); if ( cachedNaturalId != null ) { entityNaturalIdResolutionCache.naturalIdToPkMap.remove( cachedNaturalId ); sessionCachedNaturalIdValues = cachedNaturalId.getNaturalIdValue(); @@ -143,19 +140,16 @@ public void manageLocalResolution( Object naturalIdValue, EntityMappingType entityDescriptor, CachedNaturalIdValueSource source) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); - - if ( naturalIdMapping == null ) { - // nothing to do - return; + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + if ( naturalIdMapping != null ) { + cacheResolutionLocally( id, naturalIdValue, entityDescriptor ); } - - cacheResolutionLocally( id, naturalIdValue, entityDescriptor ); + // else nothing to do } @Override public Object removeLocalResolution(Object id, Object naturalId, EntityMappingType entityDescriptor) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping != null ) { NATURAL_ID_MESSAGE_LOGGER.removingLocallyCachedNaturalIdResolution( entityDescriptor.getEntityName(), @@ -163,7 +157,7 @@ public Object removeLocalResolution(Object id, Object naturalId, EntityMappingTy id ); - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); final Object localNaturalIdValues = removeNaturalIdCrossReference( id, naturalId, persister ); return localNaturalIdValues == null ? naturalId : localNaturalIdValues; } @@ -181,7 +175,7 @@ private Object removeNaturalIdCrossReference(Object id, Object naturalId, Entity validateNaturalId( persister, naturalId ); final Object sessionCachedNaturalId = removeSessionCachedNaturalIdValue( id, persister ); if ( persister.hasNaturalIdCache() ) { - final SharedSessionContractImplementor session = session(); + final var session = session(); evictCachedNaturalId( naturalId, persister, session ); if ( sessionCachedNaturalId != null // TODO: we should not really use equals() to compare instances of Hibernate Types @@ -201,9 +195,9 @@ private static void evictCachedNaturalId( } private Object removeSessionCachedNaturalIdValue(Object id, EntityPersister persister) { - final EntityResolutions entityResolutions = resolutionsByEntity.get( persister ); + final var entityResolutions = resolutionsByEntity.get( persister ); if ( entityResolutions != null ) { - final Resolution cachedNaturalId = entityResolutions.pkToNaturalIdMap.remove( id ); + final var cachedNaturalId = entityResolutions.pkToNaturalIdMap.remove( id ); if ( cachedNaturalId != null ) { entityResolutions.naturalIdToPkMap.remove( cachedNaturalId ); return cachedNaturalId.getNaturalIdValue(); @@ -219,7 +213,7 @@ public void manageSharedResolution( Object previousNaturalId, EntityMappingType entityDescriptor, CachedNaturalIdValueSource source) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping != null && naturalIdMapping.getCacheAccess() != null ) { manageSharedResolution( entityDescriptor.getEntityPersister(), @@ -237,10 +231,10 @@ private void manageSharedResolution( Object naturalIdValues, Object previousNaturalIdValues, CachedNaturalIdValueSource source) { - final NaturalIdDataAccess cacheAccess = persister.getNaturalIdMapping().getCacheAccess(); + final var cacheAccess = persister.getNaturalIdMapping().getCacheAccess(); if ( cacheAccess != null ) { - final EntityMappingType rootEntityDescriptor = persister.getRootEntityDescriptor(); - final EntityPersister rootEntityPersister = rootEntityDescriptor.getEntityPersister(); + final var rootEntityDescriptor = persister.getRootEntityDescriptor(); + final var rootEntityPersister = rootEntityDescriptor.getEntityPersister(); final Object cacheKey = cacheAccess.generateCacheKey( naturalIdValues, rootEntityPersister, session() ); switch ( source ) { case LOAD: @@ -288,7 +282,7 @@ private void cacheFromUpdate( EntityPersister rootEntityPersister, Object cacheKey, EntityMappingType rootEntityDescriptor) { - final SharedSessionContractImplementor session = session(); + final var session = session(); final Object previousCacheKey = cacheAccess.generateCacheKey( previousNaturalIdValues, rootEntityPersister, session ); @@ -301,10 +295,10 @@ private void cacheFromUpdate( cacheAccess.remove( session, previousCacheKey); final SoftLock lock = cacheAccess.lockItem( session, cacheKey, null ); - final StatisticsImplementor statistics = session.getFactory().getStatistics(); - final EventMonitor eventMonitor = session.getEventMonitor(); + final var statistics = session.getFactory().getStatistics(); + final var eventMonitor = session.getEventMonitor(); boolean put = false; - final DiagnosticEvent cachePutEvent = eventMonitor.beginCachePutEvent(); + final var cachePutEvent = eventMonitor.beginCachePutEvent(); try { put = cacheAccess.update( session, cacheKey, id ); if ( put && statistics.isStatisticsEnabled() ) { @@ -331,7 +325,7 @@ private void cacheFromUpdate( cacheAccess.unlockItem( sess, previousCacheKey, removalLock ); if (success) { boolean putAfterUpdate = false; - final DiagnosticEvent cachePutEventAfterUpdate = eventMonitor.beginCachePutEvent(); + final var cachePutEventAfterUpdate = eventMonitor.beginCachePutEvent(); try { putAfterUpdate = cacheAccess.afterUpdate( sess, cacheKey, id, lock ); if ( putAfterUpdate && statistics.isStatisticsEnabled() ) { @@ -366,12 +360,12 @@ private void cacheFromInsert( Object cacheKey, EntityMappingType rootEntityDescriptor, EntityPersister rootEntityPersister) { - final SharedSessionContractImplementor session = session(); + final var session = session(); - final StatisticsImplementor statistics = session.getFactory().getStatistics(); - final EventMonitor eventMonitor = session.getEventMonitor(); + final var statistics = session.getFactory().getStatistics(); + final var eventMonitor = session.getEventMonitor(); boolean put = false; - final DiagnosticEvent cachePutEvent = eventMonitor.beginCachePutEvent(); + final var cachePutEvent = eventMonitor.beginCachePutEvent(); try { put = cacheAccess.insert( session, cacheKey, id ); if ( put && statistics.isStatisticsEnabled() ) { @@ -418,17 +412,17 @@ private void cacheFromLoad( NaturalIdDataAccess cacheAccess, EntityMappingType rootEntityDescriptor, EntityPersister rootEntityPersister) { - final SharedSessionContractImplementor session = session(); + final var session = session(); if ( fromSharedCache( session, cacheKey, persister, cacheAccess ) != null ) { // prevent identical re-caching return; } - final StatisticsImplementor statistics = session.getFactory().getStatistics(); - final EventMonitor eventMonitor = session.getEventMonitor(); + final var statistics = session.getFactory().getStatistics(); + final var eventMonitor = session.getEventMonitor(); boolean put = false; - final DiagnosticEvent cachePutEvent = eventMonitor.beginCachePutEvent(); + final var cachePutEvent = eventMonitor.beginCachePutEvent(); try { put = cacheAccess.putFromLoad( session, cacheKey, id, null ); if ( put && statistics.isStatisticsEnabled() ) { @@ -458,14 +452,13 @@ public void removeSharedResolution(Object id, Object naturalId, EntityMappingTyp @Override public void removeSharedResolution(Object id, Object naturalId, EntityMappingType entityDescriptor, boolean delayToAfterTransactionCompletion) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping == null ) { // nothing to do return; } - final NaturalIdDataAccess cacheAccess = naturalIdMapping.getCacheAccess(); - + final var cacheAccess = naturalIdMapping.getCacheAccess(); if ( cacheAccess == null ) { // nothing to do return; @@ -475,8 +468,8 @@ public void removeSharedResolution(Object id, Object naturalId, EntityMappingTyp // 1) should be using access strategy, not plain evict.. // 2) should prefer session-cached values if any (requires interaction from removeLocalNaturalIdCrossReference) - final SharedSessionContractImplementor session = session(); - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var session = session(); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); final Object naturalIdCacheKey = cacheAccess.generateCacheKey( naturalId, persister, session ); if ( delayToAfterTransactionCompletion ) { session.asEventSource().getActionQueue().registerProcess( @@ -500,9 +493,9 @@ public void removeSharedResolution(Object id, Object naturalId, EntityMappingTyp @Override public void handleSynchronization(Object pk, Object entity, EntityMappingType entityDescriptor) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping != null ) { - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); final Object naturalIdValuesFromCurrentObjectState = naturalIdMapping.extractNaturalIdFromEntity( entity ); final boolean changed = !sameAsCached( persister, pk, naturalIdValuesFromCurrentObjectState ); if ( changed ) { @@ -534,7 +527,7 @@ public void handleEviction(Object id, Object object, EntityMappingType entityDes * @return {@code true} if the given naturalIdValues match the current cached values; {@code false} otherwise. */ public boolean sameAsCached(EntityPersister persister, Object pk, Object naturalIdValues) { - final EntityResolutions entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); + final var entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); return entityNaturalIdResolutionCache != null && entityNaturalIdResolutionCache.sameAsCached( pk, naturalIdValues ); } @@ -561,7 +554,7 @@ protected EntityPersister locatePersisterForKey(EntityPersister persister) { * @param naturalIdValues The natural id values */ protected void validateNaturalId(EntityMappingType entityDescriptor, Object naturalIdValues) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping == null ) { throw new IllegalArgumentException( "Entity did not define a natural id" ); } @@ -569,7 +562,7 @@ protected void validateNaturalId(EntityMappingType entityDescriptor, Object natu } private boolean isValidValue(Object naturalIdValues, EntityMappingType entityDescriptor) { - final NaturalIdMapping naturalIdMapping = entityDescriptor.getNaturalIdMapping(); + final var naturalIdMapping = entityDescriptor.getNaturalIdMapping(); if ( naturalIdMapping == null ) { throw new IllegalArgumentException( "Entity did not define a natural id" ); } @@ -588,19 +581,14 @@ public Object findCachedNaturalIdById(Object id, EntityMappingType entityDescrip ); } - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); - final EntityResolutions entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); if ( entityNaturalIdResolutionCache == null ) { return null; } else { - final Resolution cachedNaturalId = entityNaturalIdResolutionCache.pkToNaturalIdMap.get( id ); - if ( cachedNaturalId == null ) { - return null; - } - else { - return cachedNaturalId.getNaturalIdValue(); - } + final var cachedNaturalId = entityNaturalIdResolutionCache.pkToNaturalIdMap.get( id ); + return cachedNaturalId == null ? null : cachedNaturalId.getNaturalIdValue(); } } @@ -614,10 +602,10 @@ public Object findCachedIdByNaturalId(Object naturalId, EntityMappingType entity ); } - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); validateNaturalId( persister, naturalId ); - final EntityResolutions resolutionCache = resolutionsByEntity.get( persister ); + final var resolutionCache = resolutionsByEntity.get( persister ); final Resolution cachedNaturalId = new ResolutionImpl( persister, naturalId, persistenceContext ); if ( resolutionCache != null ) { @@ -644,11 +632,11 @@ public Object findCachedIdByNaturalId(Object naturalId, EntityMappingType entity } else { // Try the second-level cache - final NaturalIdDataAccess cacheAccessStrategy = persister.getNaturalIdCacheAccessStrategy(); - final SharedSessionContractImplementor session = session(); + final var cacheAccessStrategy = persister.getNaturalIdCacheAccessStrategy(); + final var session = session(); final Object cacheKey = cacheAccessStrategy.generateCacheKey( naturalId, persister, session ); final Object id = fromSharedCache( session, cacheKey, persister, true, cacheAccessStrategy ); - final StatisticsImplementor statistics = session.getFactory().getStatistics(); + final var statistics = session.getFactory().getStatistics(); final boolean statisticsEnabled = statistics.isStatisticsEnabled(); if ( id != null ) { // Found in second-level cache, store in session cache @@ -687,8 +675,7 @@ private void storeInResolutionCache( if ( resolutionCache == null ) { resolutionCache = new EntityResolutions( persister, persistenceContext ); - final EntityResolutions existingCache = - resolutionsByEntity.putIfAbsent( persister, resolutionCache ); + final var existingCache = resolutionsByEntity.putIfAbsent( persister, resolutionCache ); if ( existingCache != null ) { resolutionCache = existingCache; } @@ -700,10 +687,10 @@ private void storeInResolutionCache( @Override public Collection getCachedPkResolutions(EntityMappingType entityDescriptor) { - final EntityPersister persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); - final EntityResolutions entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); + final var persister = locatePersisterForKey( entityDescriptor.getEntityPersister() ); + final var entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); if ( entityNaturalIdResolutionCache != null ) { - final Collection pks = entityNaturalIdResolutionCache.pkToNaturalIdMap.keySet(); + final var pks = entityNaturalIdResolutionCache.pkToNaturalIdMap.keySet(); return pks.isEmpty() ? emptyList() : unmodifiableCollection( pks ); } else { @@ -723,7 +710,7 @@ public Collection getCachedPkResolutions(EntityMappingType entityDescriptor) */ public void stashInvalidNaturalIdReference(EntityPersister persister, Object invalidNaturalIdValues) { persister = locatePersisterForKey( persister ); - final EntityResolutions entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); + final var entityNaturalIdResolutionCache = resolutionsByEntity.get( persister ); if ( entityNaturalIdResolutionCache == null ) { throw new AssertionFailure( "Expecting NaturalIdResolutionCache to exist already for entity " + persister.getEntityName() ); @@ -736,7 +723,7 @@ public void stashInvalidNaturalIdReference(EntityPersister persister, Object inv * known-invalid natural-ids after flush. This method exposes that capability. */ public void unStashInvalidNaturalIdReferences() { - for ( EntityResolutions naturalIdResolutionCache : resolutionsByEntity.values() ) { + for ( var naturalIdResolutionCache : resolutionsByEntity.values() ) { naturalIdResolutionCache.unStashInvalidNaturalIdReferences(); } } @@ -786,7 +773,7 @@ public boolean cache(Object pk, Object naturalIdValues) { if ( pk == null ) { return false; } - final Resolution initial = pkToNaturalIdMap.get( pk ); + final var initial = pkToNaturalIdMap.get( pk ); if ( initial != null ) { if ( initial.isSame( naturalIdValues ) ) { return false; @@ -794,7 +781,7 @@ public boolean cache(Object pk, Object naturalIdValues) { naturalIdToPkMap.remove( initial ); } - final Resolution cachedNaturalId = new ResolutionImpl( getEntityDescriptor(), naturalIdValues, persistenceContext ); + final var cachedNaturalId = new ResolutionImpl( getEntityDescriptor(), naturalIdValues, persistenceContext ); pkToNaturalIdMap.put( pk, cachedNaturalId ); naturalIdToPkMap.put( cachedNaturalId, pk ); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/NonNullableTransientDependencies.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/NonNullableTransientDependencies.java index d6e06516d98e..1f80d4df5a96 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/NonNullableTransientDependencies.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/NonNullableTransientDependencies.java @@ -31,7 +31,7 @@ private Set getPropertyPaths(Object transientEntity) { if ( propertyPathsByTransientEntity == null ) { propertyPathsByTransientEntity = new IdentityHashMap<>(); } - Set propertyPaths = propertyPathsByTransientEntity.get( transientEntity ); + var propertyPaths = propertyPathsByTransientEntity.get( transientEntity ); if ( propertyPaths == null ) { propertyPaths = new HashSet<>(); propertyPathsByTransientEntity.put( transientEntity, propertyPaths ); @@ -90,8 +90,7 @@ public void resolveNonNullableTransientEntity(Object entity) { * @return The loggable representation */ public String toLoggableString(SharedSessionContractImplementor session) { - final StringBuilder result = - new StringBuilder( getClass().getSimpleName() ).append( '[' ); + final var result = new StringBuilder( getClass().getSimpleName() ).append( '[' ); if ( propertyPathsByTransientEntity != null ) { for ( var entry : propertyPathsByTransientEntity.entrySet() ) { result.append( "transientEntityName=" ) diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/SessionEventListenerManagerImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/SessionEventListenerManagerImpl.java index ec9a530643fc..4aba25f3355e 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/SessionEventListenerManagerImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/SessionEventListenerManagerImpl.java @@ -32,14 +32,14 @@ public SessionEventListenerManagerImpl(List initialListene @Override public void addListener(final SessionEventListener... additionalListeners) { Objects.requireNonNull( additionalListeners ); - final SessionEventListener[] existing = this.listeners; + final var existing = this.listeners; if ( existing == null ) { //Make a defensive copy as this array can be tracked back to API (user code) this.listeners = Arrays.copyOf( additionalListeners, additionalListeners.length ); } else { // Resize our existing array and add the new listeners - final SessionEventListener[] newList = new SessionEventListener[ existing.length + additionalListeners.length ]; + final var newList = new SessionEventListener[ existing.length + additionalListeners.length ]; System.arraycopy( existing, 0, newList, 0, existing.length ); System.arraycopy( additionalListeners, 0, newList, existing.length, additionalListeners.length ); this.listeners = newList; @@ -49,7 +49,7 @@ public void addListener(final SessionEventListener... additionalListeners) { @Override public void transactionCompletion(boolean successful) { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.transactionCompletion( successful ); } } @@ -58,7 +58,7 @@ public void transactionCompletion(boolean successful) { @Override public void jdbcConnectionAcquisitionStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcConnectionAcquisitionStart(); } } @@ -67,7 +67,7 @@ public void jdbcConnectionAcquisitionStart() { @Override public void jdbcConnectionAcquisitionEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcConnectionAcquisitionEnd(); } } @@ -76,7 +76,7 @@ public void jdbcConnectionAcquisitionEnd() { @Override public void jdbcConnectionReleaseStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcConnectionReleaseStart(); } } @@ -85,7 +85,7 @@ public void jdbcConnectionReleaseStart() { @Override public void jdbcConnectionReleaseEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcConnectionReleaseEnd(); } } @@ -94,7 +94,7 @@ public void jdbcConnectionReleaseEnd() { @Override public void jdbcPrepareStatementStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcPrepareStatementStart(); } } @@ -103,7 +103,7 @@ public void jdbcPrepareStatementStart() { @Override public void jdbcPrepareStatementEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcPrepareStatementEnd(); } } @@ -112,7 +112,7 @@ public void jdbcPrepareStatementEnd() { @Override public void jdbcExecuteStatementStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcExecuteStatementStart(); } } @@ -121,7 +121,7 @@ public void jdbcExecuteStatementStart() { @Override public void jdbcExecuteStatementEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcExecuteStatementEnd(); } } @@ -130,7 +130,7 @@ public void jdbcExecuteStatementEnd() { @Override public void jdbcExecuteBatchStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcExecuteBatchStart(); } } @@ -139,7 +139,7 @@ public void jdbcExecuteBatchStart() { @Override public void jdbcExecuteBatchEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.jdbcExecuteBatchEnd(); } } @@ -148,7 +148,7 @@ public void jdbcExecuteBatchEnd() { @Override public void cachePutStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.cachePutStart(); } } @@ -157,7 +157,7 @@ public void cachePutStart() { @Override public void cachePutEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.cachePutEnd(); } } @@ -166,7 +166,7 @@ public void cachePutEnd() { @Override public void cacheGetStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.cacheGetStart(); } } @@ -175,7 +175,7 @@ public void cacheGetStart() { @Override public void cacheGetEnd(boolean hit) { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.cacheGetEnd( hit ); } } @@ -184,7 +184,7 @@ public void cacheGetEnd(boolean hit) { @Override public void flushStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.flushStart(); } } @@ -193,7 +193,7 @@ public void flushStart() { @Override public void flushEnd(int numberOfEntities, int numberOfCollections) { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.flushEnd( numberOfEntities, numberOfCollections ); } } @@ -202,7 +202,7 @@ public void flushEnd(int numberOfEntities, int numberOfCollections) { @Override public void prePartialFlushStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.prePartialFlushStart(); } } @@ -211,7 +211,7 @@ public void prePartialFlushStart() { @Override public void prePartialFlushEnd() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.prePartialFlushEnd(); } } @@ -220,7 +220,7 @@ public void prePartialFlushEnd() { @Override public void partialFlushStart() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.partialFlushStart(); } } @@ -229,7 +229,7 @@ public void partialFlushStart() { @Override public void partialFlushEnd(int numberOfEntities, int numberOfCollections) { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.partialFlushEnd( numberOfEntities, numberOfCollections ); } } @@ -241,7 +241,7 @@ public void dirtyCalculationStart() { return; } - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.dirtyCalculationStart(); } } @@ -249,7 +249,7 @@ public void dirtyCalculationStart() { @Override public void dirtyCalculationEnd(boolean dirty) { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.dirtyCalculationEnd( dirty ); } } @@ -258,7 +258,7 @@ public void dirtyCalculationEnd(boolean dirty) { @Override public void end() { if ( listeners != null ) { - for ( SessionEventListener listener : listeners ) { + for ( var listener : listeners ) { listener.end(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java index 89d64b029f0b..dd13a5da36f5 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java @@ -12,7 +12,6 @@ import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; @@ -45,8 +44,6 @@ import org.hibernate.engine.spi.NaturalIdResolutions; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.PersistentAttributeInterceptable; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.Status; @@ -55,8 +52,6 @@ import org.hibernate.event.spi.PostLoadEventListener; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.collections.InstanceIdentityMap; -import org.hibernate.metamodel.MappingMetamodel; -import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.pretty.MessageHelper; @@ -66,12 +61,12 @@ import org.hibernate.sql.results.graph.entity.EntityInitializer; import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingState; import org.hibernate.sql.results.spi.LoadContexts; -import org.hibernate.type.CollectionType; import org.jboss.logging.Logger; import org.checkerframework.checker.nullness.qual.Nullable; +import static java.util.Collections.emptyIterator; import static java.util.Collections.emptyMap; import static org.hibernate.engine.internal.ManagedTypeHelper.asHibernateProxy; import static org.hibernate.engine.internal.ManagedTypeHelper.asManagedEntity; @@ -246,11 +241,11 @@ public BatchFetchQueue getBatchFetchQueue() { public void clear() { if ( entitiesByKey != null ) { //Strictly avoid lambdas in this case - for ( EntityHolderImpl value : entitiesByKey.values() ) { + for ( var value : entitiesByKey.values() ) { if ( value != null ) { value.state = EntityHolderState.DETACHED; if ( value.proxy != null ) { - final LazyInitializer lazyInitializer = extractLazyInitializer( value.proxy ); + final var lazyInitializer = extractLazyInitializer( value.proxy ); if ( lazyInitializer != null ) { lazyInitializer.unsetSession(); } @@ -327,7 +322,7 @@ public void afterTransactionCompletion() { @Override public Object[] getDatabaseSnapshot(Object id, EntityPersister persister) throws HibernateException { - final EntityKey key = session.generateEntityKey( id, persister ); + final var key = session.generateEntityKey( id, persister ); final Object cached = entitySnapshotsByKey == null ? null : entitySnapshotsByKey.get( key ); if ( cached != null ) { return cached == NO_ROW ? null : (Object[]) cached; @@ -400,9 +395,9 @@ public EntityHolder claimEntityHolderIfPossible( Object entity, JdbcValuesSourceProcessingState processingState, EntityInitializer initializer) { - final Map entityHolderMap = getOrInitializeEntitiesByKey(); - EntityHolderImpl holder = getOrInitializeNewHolder().withEntity( key, key.getPersister(), entity ); - final EntityHolderImpl oldHolder = entityHolderMap.putIfAbsent( key, newEntityHolder ); + final var entityHolderMap = getOrInitializeEntitiesByKey(); + var holder = getOrInitializeNewHolder().withEntity( key, key.getPersister(), entity ); + final var oldHolder = entityHolderMap.putIfAbsent( key, newEntityHolder ); if ( oldHolder != null ) { if ( entity != null ) { assert oldHolder.entity == null || oldHolder.entity == entity; @@ -442,18 +437,17 @@ public boolean containsEntityHolder(EntityKey key) { @Override public void postLoad(JdbcValuesSourceProcessingState processingState, Consumer holderConsumer) { - final Callback callback = processingState.getExecutionContext().getCallback(); + final var callback = processingState.getExecutionContext().getCallback(); if ( processingState.getLoadingEntityHolders() != null ) { - final EventListenerGroup listenerGroup = - getSession().getFactory().getEventListenerGroups().eventListenerGroup_POST_LOAD; - final PostLoadEvent postLoadEvent = processingState.getPostLoadEvent(); - for ( final EntityHolder holder : processingState.getLoadingEntityHolders() ) { + final var listenerGroup = getSession().getFactory().getEventListenerGroups().eventListenerGroup_POST_LOAD; + final var postLoadEvent = processingState.getPostLoadEvent(); + for ( final var holder : processingState.getLoadingEntityHolders() ) { processLoadedEntityHolder( holder, listenerGroup, postLoadEvent, callback, holderConsumer ); } processingState.getLoadingEntityHolders().clear(); } if ( processingState.getReloadedEntityHolders() != null ) { - for ( final EntityHolder holder : processingState.getReloadedEntityHolders() ) { + for ( final var holder : processingState.getReloadedEntityHolders() ) { processLoadedEntityHolder( holder, null, null, callback, holderConsumer ); } processingState.getReloadedEntityHolders().clear(); @@ -497,9 +491,9 @@ public void addEntity(EntityKey key, Object entity) { @Override public EntityHolder addEntityHolder(EntityKey key, Object entity) { - final Map entityHolderMap = getOrInitializeEntitiesByKey(); - EntityHolderImpl holder = getOrInitializeNewHolder().withEntity( key, key.getPersister(), entity ); - final EntityHolderImpl oldHolder = entityHolderMap.putIfAbsent( key, holder ); + final var entityHolderMap = getOrInitializeEntitiesByKey(); + var holder = getOrInitializeNewHolder().withEntity( key, key.getPersister(), entity ); + final var oldHolder = entityHolderMap.putIfAbsent( key, holder ); if ( oldHolder != null ) { oldHolder.entity = entity; holder = oldHolder; @@ -508,7 +502,7 @@ public EntityHolder addEntityHolder(EntityKey key, Object entity) { newEntityHolder = null; } holder.state = EntityHolderState.INITIALIZED; - final BatchFetchQueue fetchQueue = this.batchFetchQueue; + final var fetchQueue = this.batchFetchQueue; if ( fetchQueue != null ) { fetchQueue.removeBatchLoadableEntityKey( key ); } @@ -517,19 +511,19 @@ public EntityHolder addEntityHolder(EntityKey key, Object entity) { @Override public Object getEntity(EntityKey key) { - final EntityHolderImpl holder = entitiesByKey == null ? null : entitiesByKey.get( key ); + final var holder = entitiesByKey == null ? null : entitiesByKey.get( key ); return holder == null || holder.state == EntityHolderState.UNINITIALIZED ? null : holder.entity; } @Override public boolean containsEntity(EntityKey key) { - final EntityHolderImpl holder = entitiesByKey == null ? null : entitiesByKey.get( key ); + final var holder = entitiesByKey == null ? null : entitiesByKey.get( key ); return holder != null && holder.entity != null && holder.state != EntityHolderState.UNINITIALIZED; } @Override public Object removeEntity(EntityKey key) { - final EntityHolderImpl holder = removeHolder( key ); + final var holder = removeHolder( key ); if ( holder != null ) { final Object entity = holder.entity; if ( holder.proxy != null ) { @@ -553,7 +547,7 @@ private EntityHolderImpl removeHolder(EntityKey key) { holder = entitiesByKey.remove( key ); if ( entitiesByUniqueKey != null ) { final Object entity = holder == null ? null : holder.entity; - final Iterator itr = entitiesByUniqueKey.values().iterator(); + final var itr = entitiesByUniqueKey.values().iterator(); while ( itr.hasNext() ) { if ( itr.next() == entity ) { itr.remove(); @@ -573,7 +567,7 @@ private EntityHolderImpl removeHolder(EntityKey key) { if ( nullifiableEntityKeys != null ) { nullifiableEntityKeys.remove( key ); } - final BatchFetchQueue fetchQueue = this.batchFetchQueue; + final var fetchQueue = this.batchFetchQueue; if ( fetchQueue != null ) { fetchQueue.removeBatchLoadableEntityKey( key ); fetchQueue.removeSubselect( key ); @@ -693,7 +687,7 @@ public boolean containsCollection(PersistentCollection collection) { @Override public boolean containsProxy(Object entity) { if ( entitiesByKey != null ) { - for ( EntityHolderImpl holder : entitiesByKey.values() ) { + for ( var holder : entitiesByKey.values() ) { if ( holder.proxy == entity ) { return true; } @@ -704,34 +698,31 @@ public boolean containsProxy(Object entity) { @Override public boolean reassociateIfUninitializedProxy(Object value) throws MappingException { - if ( ! Hibernate.isInitialized( value ) ) { - - // could be a proxy.... - final LazyInitializer lazyInitializer = extractLazyInitializer( value ); + if ( !Hibernate.isInitialized( value ) ) { + // could be a proxy + final var lazyInitializer = extractLazyInitializer( value ); if ( lazyInitializer != null ) { reassociateProxy( lazyInitializer, asHibernateProxy( value ) ); return true; } - - // or an uninitialized enhanced entity ("bytecode proxy")... + // or an uninitialized enhanced entity ("bytecode proxy") if ( isPersistentAttributeInterceptable( value ) ) { - final PersistentAttributeInterceptable bytecodeProxy = asPersistentAttributeInterceptable( value ); - final BytecodeLazyAttributeInterceptor interceptor = - (BytecodeLazyAttributeInterceptor) bytecodeProxy.$$_hibernate_getInterceptor(); + final var bytecodeProxy = asPersistentAttributeInterceptable( value ); + final var interceptor = + (BytecodeLazyAttributeInterceptor) + bytecodeProxy.$$_hibernate_getInterceptor(); if ( interceptor != null ) { interceptor.setSession( getSession() ); } return true; } - } - return false; } @Override public void reassociateProxy(Object value, Object id) throws MappingException { - final LazyInitializer lazyInitializer = extractLazyInitializer( value ); + final var lazyInitializer = extractLazyInitializer( value ); if ( lazyInitializer != null ) { LOG.tracef( "Setting proxy identifier: %s", id ); lazyInitializer.setIdentifier( id ); @@ -747,13 +738,13 @@ public void reassociateProxy(Object value, Object id) throws MappingException { */ private void reassociateProxy(LazyInitializer li, HibernateProxy proxy) { if ( li.getSession() != session ) { - final EntityPersister persister = + final var persister = session.getFactory().getMappingMetamodel() .getEntityDescriptor( li.getEntityName() ); - final EntityKey key = session.generateEntityKey( li.getInternalIdentifier(), persister ); - final EntityHolderImpl holder = getOrInitializeNewHolder().withProxy( key, persister, proxy ); + final var key = session.generateEntityKey( li.getInternalIdentifier(), persister ); + final var holder = getOrInitializeNewHolder().withProxy( key, persister, proxy ); // any earlier proxy takes precedence - final EntityHolderImpl oldHolder = getOrInitializeEntitiesByKey().putIfAbsent( key, holder ); + final var oldHolder = getOrInitializeEntitiesByKey().putIfAbsent( key, holder ); if ( oldHolder != null ) { if ( oldHolder.proxy == null ) { oldHolder.proxy = proxy; @@ -768,7 +759,7 @@ private void reassociateProxy(LazyInitializer li, HibernateProxy proxy) { @Override public Object unproxy(Object maybeProxy) throws HibernateException { - final LazyInitializer lazyInitializer = extractLazyInitializer( maybeProxy ); + final var lazyInitializer = extractLazyInitializer( maybeProxy ); if ( lazyInitializer != null ) { if ( lazyInitializer.isUninitialized() ) { throw new PersistentObjectException( "object was an uninitialized proxy for " @@ -784,14 +775,14 @@ public Object unproxy(Object maybeProxy) throws HibernateException { @Override public Object unproxyAndReassociate(final Object maybeProxy) throws HibernateException { - final LazyInitializer lazyInitializer = extractLazyInitializer( maybeProxy ); + final var lazyInitializer = extractLazyInitializer( maybeProxy ); if ( lazyInitializer != null ) { reassociateProxy( lazyInitializer, asHibernateProxy( maybeProxy ) ); //initialize + unwrap the object and return it return lazyInitializer.getImplementation(); } else if ( isPersistentAttributeInterceptable( maybeProxy ) ) { - final PersistentAttributeInterceptor interceptor = + final var interceptor = asPersistentAttributeInterceptable( maybeProxy ) .$$_hibernate_getInterceptor(); if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { @@ -834,7 +825,7 @@ public Object narrowProxy(Object proxy, EntityPersister persister, EntityKey key // Similarly, if the original HibernateProxy is initialized, there // is again no point in creating a proxy. Just return the impl - final LazyInitializer lazyInitializer = extractLazyInitializer( proxy ); + final var lazyInitializer = extractLazyInitializer( proxy ); if ( !lazyInitializer.isUninitialized() ) { final Object impl = lazyInitializer.getImplementation(); // can we return it? @@ -846,8 +837,7 @@ public Object narrowProxy(Object proxy, EntityPersister persister, EntityKey key // Otherwise, create the narrowed proxy - final HibernateProxy narrowedProxy = - asHibernateProxy( persister.createProxy( key.getIdentifier(), session ) ); + final var narrowedProxy = asHibernateProxy( persister.createProxy( key.getIdentifier(), session ) ); // set the read-only/modifiable mode in the new proxy to what it was in the original proxy narrowedProxy.getHibernateLazyInitializer().setReadOnly( lazyInitializer.isReadOnly() ); return narrowedProxy; @@ -862,7 +852,7 @@ public Object narrowProxy(Object proxy, EntityPersister persister, EntityKey key private Object removeProxyByKey(final EntityKey key) { if ( entitiesByKey != null ) { - final EntityHolderImpl entityHolder = entitiesByKey.get( key ); + final var entityHolder = entitiesByKey.get( key ); if ( entityHolder != null ) { final Object proxy = entityHolder.proxy; entityHolder.proxy = null; @@ -885,7 +875,7 @@ public Object proxyFor(EntityPersister persister, EntityKey key, Object impl) th @Override public Object proxyFor(Object impl) throws HibernateException { - final EntityEntry entry = getEntry( impl ); + final var entry = getEntry( impl ); return entry == null ? impl : proxyFor( entry.getPersister(), entry.getEntityKey(), impl ); } @@ -899,9 +889,9 @@ public Object proxyFor(EntityHolder holder, EntityPersister persister) { @Override public void addEnhancedProxy(EntityKey key, PersistentAttributeInterceptable entity) { - final Map entityHolderMap = getOrInitializeEntitiesByKey(); - final EntityHolderImpl holder = getOrInitializeNewHolder().withEntity( key, key.getPersister(), entity ); - final EntityHolderImpl oldHolder = entityHolderMap.putIfAbsent( key, holder ); + final var entityHolderMap = getOrInitializeEntitiesByKey(); + final var holder = getOrInitializeNewHolder().withEntity( key, key.getPersister(), entity ); + final var oldHolder = entityHolderMap.putIfAbsent( key, holder ); if ( oldHolder != null ) { oldHolder.entity = entity; oldHolder.state = EntityHolderState.ENHANCED_PROXY; @@ -918,7 +908,7 @@ public Object getCollectionOwner(Object key, CollectionPersister collectionPersi // 1) collection key // 2) collection owner key // these 2 are not always the same. Same is true in the case of ToOne associations with property-ref... - final EntityPersister ownerPersister = collectionPersister.getOwnerEntityPersister(); + final var ownerPersister = collectionPersister.getOwnerEntityPersister(); if ( ownerPersister.getIdentifierType().getReturnedClass().isInstance( key ) ) { return getEntity( session.generateEntityKey( key, collectionPersister.getOwnerEntityPersister() ) ); } @@ -934,7 +924,7 @@ public Object getCollectionOwner(Object key, CollectionPersister collectionPersi return getEntity( session.generateEntityKey( ownerId, ownerPersister ) ); } - final CollectionType collectionType = collectionPersister.getCollectionType(); + final var collectionType = collectionPersister.getCollectionType(); // 2) The incoming key is most likely the collection key which we need to resolve to the owner key // find the corresponding owner instance @@ -976,7 +966,7 @@ public Object getCollectionOwner(Object key, CollectionPersister collectionPersi @Override public Object getLoadedCollectionOwnerOrNull(PersistentCollection collection) { - final CollectionEntry ce = getCollectionEntry( collection ); + final var ce = getCollectionEntry( collection ); if ( ce == null || ce.getLoadedPersister() == null ) { return null; } @@ -1013,7 +1003,7 @@ private Object getLoadedCollectionOwnerIdOrNull(CollectionEntry ce) { @Override public void addUninitializedCollection(CollectionPersister persister, PersistentCollection collection, Object id) { - final CollectionEntry ce = new CollectionEntry( collection, persister, id, flushing ); + final var ce = new CollectionEntry( collection, persister, id, flushing ); addCollection( collection, ce, id ); if ( session.getLoadQueryInfluencers().effectivelyBatchLoadable( persister ) ) { getBatchFetchQueue().addBatchLoadableCollection( collection, ce ); @@ -1024,7 +1014,7 @@ public void addUninitializedCollection(CollectionPersister persister, Persistent public void addUninitializedDetachedCollection(CollectionPersister persister, PersistentCollection collection) { final Object key = collection.getKey(); assert key != null; - final CollectionEntry ce = new CollectionEntry( persister, key ); + final var ce = new CollectionEntry( persister, key ); addCollection( collection, ce, key ); if ( session.getLoadQueryInfluencers().effectivelyBatchLoadable( persister ) ) { getBatchFetchQueue().addBatchLoadableCollection( collection, ce ); @@ -1040,25 +1030,22 @@ public void addNewCollection(CollectionPersister persister, PersistentCollection @Override public void replaceCollection(CollectionPersister persister, PersistentCollection oldCollection, PersistentCollection collection) { if ( !oldCollection.isDirectlyAccessible() ) { - throw new HibernateException( - "Replacement of not directly accessible collection found: " + oldCollection.getRole() ); + throw new HibernateException( "Replacement of not directly accessible collection found: " + + oldCollection.getRole() ); } assert !collection.isDirectlyAccessible(); - final CollectionEntry oldEntry = collectionEntries.remove( oldCollection.$$_hibernate_getInstanceId(), oldCollection ); - final CollectionEntry entry; - if ( oldEntry.getLoadedPersister() != null ) { - // This is an already existing/loaded collection so ensure the loadedPersister is initialized - entry = new CollectionEntry( collection, session.getFactory() ); - } - else { - // A newly wrapped collection - entry = new CollectionEntry( persister, collection ); - } + final var oldEntry = collectionEntries.remove( oldCollection.$$_hibernate_getInstanceId(), oldCollection ); + final var entry = + oldEntry.getLoadedPersister() != null + // This is an already existing/loaded collection so ensure the loadedPersister is initialized + ? new CollectionEntry( collection, session.getFactory() ) + // A newly wrapped collection + : new CollectionEntry( persister, collection ); putCollectionEntry( collection, entry ); final Object key = collection.getKey(); if ( key != null ) { - final CollectionKey collectionKey = new CollectionKey( entry.getLoadedPersister(), key ); - final PersistentCollection old = addCollectionByKey( collectionKey, collection ); + final var collectionKey = new CollectionKey( entry.getLoadedPersister(), key ); + final var old = addCollectionByKey( collectionKey, collection ); if ( old == null ) { throw new HibernateException( "No collection for replacement found: " + collectionKey.getRole() ); } @@ -1074,8 +1061,8 @@ public void replaceCollection(CollectionPersister persister, PersistentCollectio */ private void addCollection(PersistentCollection coll, CollectionEntry entry, Object key) { putCollectionEntry( coll, entry ); - final CollectionKey collectionKey = new CollectionKey( entry.getLoadedPersister(), key ); - final PersistentCollection old = addCollectionByKey( collectionKey, coll ); + final var collectionKey = new CollectionKey( entry.getLoadedPersister(), key ); + final var old = addCollectionByKey( collectionKey, coll ); if ( old != null ) { if ( old == coll ) { throw new AssertionFailure( "bug adding collection twice" ); @@ -1087,12 +1074,12 @@ private void addCollection(PersistentCollection coll, CollectionEntry entry, } private void putCollectionEntry(PersistentCollection collection, CollectionEntry entry) { - if ( this.collectionEntries == null ) { - this.collectionEntries = new InstanceIdentityMap<>(); + if ( collectionEntries == null ) { + collectionEntries = new InstanceIdentityMap<>(); } assert collection.$$_hibernate_getInstanceId() == 0; collection.$$_hibernate_setInstanceId( nextCollectionInstanceId() ); - this.collectionEntries.put( collection, entry ); + collectionEntries.put( collection, entry ); } /** @@ -1102,7 +1089,7 @@ private void putCollectionEntry(PersistentCollection collection, CollectionEn * @param persister The collection persister */ private void addCollection(PersistentCollection collection, CollectionPersister persister) { - final CollectionEntry ce = new CollectionEntry( persister, collection ); + final var ce = new CollectionEntry( persister, collection ); putCollectionEntry( collection, ce ); } @@ -1114,7 +1101,7 @@ public void addInitializedDetachedCollection(CollectionPersister collectionPersi addCollection( collection, collectionPersister ); } else { - final CollectionEntry ce = new CollectionEntry( collection, session.getFactory() ); + final var ce = new CollectionEntry( collection, session.getFactory() ); addCollection( collection, ce, collection.getKey() ); } } @@ -1122,7 +1109,7 @@ public void addInitializedDetachedCollection(CollectionPersister collectionPersi @Override public CollectionEntry addInitializedCollection(CollectionPersister persister, PersistentCollection collection, Object id) throws HibernateException { - final CollectionEntry ce = new CollectionEntry( collection, persister, id, flushing ); + final var ce = new CollectionEntry( collection, persister, id, flushing ); ce.postInitialize( collection, session ); addCollection( collection, ce, id ); return ce; @@ -1219,15 +1206,15 @@ public Serializable getSnapshot(PersistentCollection coll) { @Override public Object getProxy(EntityKey key) { - final EntityHolderImpl holder = entitiesByKey == null ? null : entitiesByKey.get( key ); + final var holder = entitiesByKey == null ? null : entitiesByKey.get( key ); return holder == null ? null : holder.proxy; } @Override public void addProxy(EntityKey key, Object proxy) { - final Map entityHolderMap = getOrInitializeEntitiesByKey(); - final EntityHolderImpl holder = getOrInitializeNewHolder().withProxy( key, key.getPersister(), proxy ); - final EntityHolderImpl oldHolder = entityHolderMap.putIfAbsent( key, holder ); + final var entityHolderMap = getOrInitializeEntitiesByKey(); + final var holder = getOrInitializeNewHolder().withProxy( key, key.getPersister(), proxy ); + final var oldHolder = entityHolderMap.putIfAbsent( key, holder ); if ( oldHolder != null ) { oldHolder.proxy = proxy; } @@ -1238,7 +1225,7 @@ public void addProxy(EntityKey key, Object proxy) { @Override public Object removeProxy(EntityKey key) { - final BatchFetchQueue fetchQueue = this.batchFetchQueue; + final var fetchQueue = this.batchFetchQueue; if ( fetchQueue != null ) { fetchQueue.removeBatchLoadableEntityKey( key ); fetchQueue.removeSubselect( key ); @@ -1264,13 +1251,15 @@ public Map getEntitiesByKey() { if ( entitiesByKey == null ) { return emptyMap(); } - final HashMap result = mapOfSize( entitiesByKey.size() ); - for ( Entry entry : entitiesByKey.entrySet() ) { - if ( entry.getValue().entity != null ) { - result.put( entry.getKey(), entry.getValue().entity ); + else { + final HashMap result = mapOfSize( entitiesByKey.size() ); + for ( var entry : entitiesByKey.entrySet() ) { + if ( entry.getValue().entity != null ) { + result.put( entry.getKey(), entry.getValue().entity ); + } } + return result; } - return result; } // Used by Hibernate Reactive @@ -1297,15 +1286,15 @@ public Map getEntityHoldersByKey() { @Override public Iterator managedEntitiesIterator() { if ( entitiesByKey == null ) { - return Collections.emptyIterator(); + return emptyIterator(); } - final Iterator iterator = entitiesByKey.values().iterator(); + final var iterator = entitiesByKey.values().iterator(); final var iter = new Iterator() { Object next; void prepareNext() { next = null; while ( iterator.hasNext() ) { - final EntityHolderImpl next = iterator.next(); + final var next = iterator.next(); if ( next.entity != null ) { this.next = next.entity; break; @@ -1356,7 +1345,7 @@ private int nextCollectionInstanceId() { public void forEachCollectionEntry(BiConsumer, CollectionEntry> action, boolean concurrent) { if ( collectionEntries != null ) { if ( concurrent ) { - for ( Entry,CollectionEntry> entry : collectionEntries.toArray() ) { + for ( var entry : collectionEntries.toArray() ) { action.accept( entry.getKey(), entry.getValue() ); } } @@ -1476,14 +1465,14 @@ public Entry[] reentrantSafeEntityEntries() { public Object getOwnerId(String entityName, String propertyName, Object childEntity, Map mergeMap) { final String collectionRole = entityName + '.' + propertyName; - final MappingMetamodel mappingMetamodel = session.getFactory().getMappingMetamodel(); - final EntityPersister persister = mappingMetamodel.getEntityDescriptor( entityName ); - final CollectionPersister collectionPersister = mappingMetamodel.getCollectionDescriptor( collectionRole ); + final var mappingMetamodel = session.getFactory().getMappingMetamodel(); + final var persister = mappingMetamodel.getEntityDescriptor( entityName ); + final var collectionPersister = mappingMetamodel.getCollectionDescriptor( collectionRole ); // try cache lookup first final Object parent = getParentsByChild( childEntity ); if ( parent != null ) { - final EntityEntry entityEntry = entityEntryContext.getEntityEntry( parent ); + final var entityEntry = entityEntryContext.getEntityEntry( parent ); //there maybe more than one parent, filter by type if ( persister.isSubclassEntityName( entityEntry.getEntityName() ) && isFoundInParent( propertyName, childEntity, persister, collectionPersister, parent ) ) { @@ -1498,7 +1487,7 @@ && isFoundInParent( propertyName, childEntity, persister, collectionPersister, p //not found in case, proceed // iterate all the entities currently associated with the persistence context. for ( var me : reentrantSafeEntityEntries() ) { - final EntityEntry entityEntry = me.getValue(); + final var entityEntry = me.getValue(); // does this entity entry pertain to the entity persister in which we are interested (owner)? if ( persister.isSubclassEntityName( entityEntry.getEntityName() ) ) { final Object entityEntryInstance = me.getKey(); @@ -1542,12 +1531,12 @@ && isFoundInParent( propertyName, childEntity, persister, collectionPersister, p // NOTE: decided to put this here rather than in the above loop as I was nervous about the performance // of the loop-in-loop especially considering this is far more likely the 'edge case' if ( mergeMap != null ) { - for ( Object o : mergeMap.entrySet() ) { - final Entry mergeMapEntry = (Entry) o; - final LazyInitializer lazyInitializer = extractLazyInitializer( mergeMapEntry.getKey() ); + for ( Object entry : mergeMap.entrySet() ) { + final var mergeMapEntry = (Entry) entry; + final var lazyInitializer = extractLazyInitializer( mergeMapEntry.getKey() ); if ( lazyInitializer != null ) { if ( persister.isSubclassEntityName( lazyInitializer.getEntityName() ) ) { - HibernateProxy proxy = asHibernateProxy( mergeMapEntry.getKey() ); + final var proxy = asHibernateProxy( mergeMapEntry.getKey() ); boolean found = isFoundInParent( propertyName, childEntity, @@ -1604,9 +1593,9 @@ private boolean isFoundInParent( @Override public Object getIndexInOwner(String entity, String property, Object childEntity, Map mergeMap) { - final MappingMetamodelImplementor metamodel = session.getFactory().getMappingMetamodel(); - final EntityPersister persister = metamodel.getEntityDescriptor( entity ); - final CollectionPersister cp = metamodel.getCollectionDescriptor( entity + '.' + property ); + final var metamodel = session.getFactory().getMappingMetamodel(); + final var persister = metamodel.getEntityDescriptor( entity ); + final var cp = metamodel.getCollectionDescriptor( entity + '.' + property ); //Extracted as we're logging within two hot loops final boolean debugEnabled = LOG.isDebugEnabled(); @@ -1614,11 +1603,10 @@ public Object getIndexInOwner(String entity, String property, Object childEntity // try cache lookup first final Object parent = getParentsByChild( childEntity ); if ( parent != null ) { - final EntityEntry entityEntry = entityEntryContext.getEntityEntry( parent ); + final var entityEntry = entityEntryContext.getEntityEntry( parent ); //there maybe more than one parent, filter by type if ( persister.isSubclassEntityName( entityEntry.getEntityName() ) ) { Object index = getIndexInParent( property, childEntity, persister, cp, parent ); - if ( index == null && mergeMap != null ) { final Object unMergedInstance = mergeMap.get( parent ); final Object unMergedChild = mergeMap.get( childEntity ); @@ -1678,12 +1666,9 @@ private Object getIndexInParent( CollectionPersister collectionPersister, Object potentialParent){ final Object collection = persister.getPropertyValue( potentialParent, property ); - if ( collection != null && Hibernate.isInitialized( collection ) ) { - return collectionPersister.getCollectionType().indexOf( collection, childEntity ); - } - else { - return null; - } + return collection != null && Hibernate.isInitialized( collection ) + ? collectionPersister.getCollectionType().indexOf( collection, childEntity ) + : null; } @Override @@ -1710,12 +1695,12 @@ public boolean isReadOnly(Object entityOrProxy) { throw new IllegalArgumentException( "Entity may not be null" ); } - final LazyInitializer lazyInitializer = extractLazyInitializer( entityOrProxy ); + final var lazyInitializer = extractLazyInitializer( entityOrProxy ); if ( lazyInitializer != null ) { return lazyInitializer.isReadOnly(); } else { - final EntityEntry ee = getEntry( entityOrProxy ); + final var ee = getEntry( entityOrProxy ); if ( ee == null ) { throw new IllegalArgumentException( "Given entity is not associated with the persistence context" ); } @@ -1728,27 +1713,23 @@ public void setReadOnly(Object object, boolean readOnly) { if ( object == null ) { throw new IllegalArgumentException( "Entity may not be null" ); } - if ( isReadOnly( object ) == readOnly ) { - return; - } - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); - if ( lazyInitializer != null ) { - setProxyReadOnly( lazyInitializer, readOnly ); - if ( ! lazyInitializer.isUninitialized() ) { - setEntityReadOnly( - lazyInitializer.getImplementation(), - readOnly - ); + if ( isReadOnly( object ) != readOnly ) { + final var lazyInitializer = extractLazyInitializer( object ); + if ( lazyInitializer != null ) { + setProxyReadOnly( lazyInitializer, readOnly ); + if ( !lazyInitializer.isUninitialized() ) { + setEntityReadOnly( lazyInitializer.getImplementation(), readOnly ); + } } - } - else { - setEntityReadOnly( object, readOnly ); - // PersistenceContext.proxyFor( entity ) returns entity if there is no proxy for that entity - // so need to check the return value to be sure it is really a proxy - final Object maybeProxy = getSession().getPersistenceContextInternal().proxyFor( object ); - final LazyInitializer lazyInitializer1 = extractLazyInitializer( maybeProxy ); - if ( lazyInitializer1 != null ) { - setProxyReadOnly( lazyInitializer1, readOnly ); + else { + setEntityReadOnly( object, readOnly ); + // PersistenceContext.proxyFor( entity ) returns entity if there is no proxy for that entity + // so need to check the return value to be sure it is really a proxy + final Object maybeProxy = getSession().getPersistenceContextInternal().proxyFor( object ); + final var initializer = extractLazyInitializer( maybeProxy ); + if ( initializer != null ) { + setProxyReadOnly( initializer, readOnly ); + } } } } @@ -1762,7 +1743,7 @@ private void setProxyReadOnly(LazyInitializer hibernateLazyInitializer, boolean } private void setEntityReadOnly(Object entity, boolean readOnly) { - final EntityEntry entry = getEntry( entity ); + final var entry = getEntry( entity ); if ( entry == null ) { throw new IllegalArgumentException( "Given entity is not associated with the persistence context" ); } @@ -1772,14 +1753,14 @@ private void setEntityReadOnly(Object entity, boolean readOnly) { @Override public void replaceDelayedEntityIdentityInsertKeys(EntityKey oldKey, Object generatedId) { - final EntityHolderImpl holder = entitiesByKey == null ? null : entitiesByKey.remove( oldKey ); + final var holder = entitiesByKey == null ? null : entitiesByKey.remove( oldKey ); final Object entity = holder == null ? null : holder.entity; - final EntityEntry oldEntry = entityEntryContext.removeEntityEntry( entity ); + final var oldEntry = entityEntryContext.removeEntityEntry( entity ); this.parentsByChild = null; - final EntityKey newKey = session.generateEntityKey( generatedId, oldEntry.getPersister() ); - EntityHolder entityHolder = addEntityHolder( newKey, entity ); - EntityEntry entityEntry = addEntry( + final var newKey = session.generateEntityKey( generatedId, oldEntry.getPersister() ); + final var entityHolder = addEntityHolder( newKey, entity ); + final var entityEntry = addEntry( entity, oldEntry.getStatus(), oldEntry.getLoadedState(), @@ -1796,8 +1777,8 @@ public void replaceDelayedEntityIdentityInsertKeys(EntityKey oldKey, Object gene @Override public void replaceEntityEntryRowId(Object entity, Object rowId) { - final EntityEntry oldEntry = entityEntryContext.removeEntityEntry( entity ); - EntityEntry entityEntry = addEntry( + final var oldEntry = entityEntryContext.removeEntityEntry( entity ); + final var entityEntry = addEntry( entity, oldEntry.getStatus(), oldEntry.getLoadedState(), @@ -1837,7 +1818,7 @@ public void serialize(ObjectOutputStream oos) throws IOException { writeMapToStream( entitiesByKey, oos, "entitiesByKey", (entry, stream) -> { entry.getKey().serialize( stream ); - final EntityHolderImpl holder = entry.getValue(); + final var holder = entry.getValue(); stream.writeObject( holder.descriptor.getEntityName() ); stream.writeObject( holder.entity ); stream.writeObject( holder.proxy ); @@ -1926,8 +1907,8 @@ public static StatefulPersistenceContext deserialize( ObjectInputStream ois, SessionImplementor session) throws IOException, ClassNotFoundException { LOG.trace( "Deserializing persistence context" ); - final StatefulPersistenceContext rtn = new StatefulPersistenceContext( session ); - SessionFactoryImplementor sfi = session.getFactory(); + final var rtn = new StatefulPersistenceContext( session ); + final var sfi = session.getFactory(); // during deserialization, we need to reconnect all proxies and // collections to this session, as well as the EntityEntry and @@ -1967,16 +1948,17 @@ public static StatefulPersistenceContext deserialize( LOG.trace( "Starting deserialization of [" + count + "] entitiesByKey entries" ); } rtn.entitiesByKey = mapOfSize(Math.max(count, INIT_COLL_SIZE)); + final var metamodel = sfi.getMappingMetamodel(); for ( int i = 0; i < count; i++ ) { - final EntityKey ek = EntityKey.deserialize( ois, sfi ); - final EntityPersister persister = sfi.getMappingMetamodel().getEntityDescriptor( (String) ois.readObject() ); + final var ek = EntityKey.deserialize( ois, sfi ); + final var persister = metamodel.getEntityDescriptor( (String) ois.readObject() ); final Object entity = ois.readObject(); final Object proxy = ois.readObject(); - final EntityHolderState state = (EntityHolderState) ois.readObject(); - final EntityHolderImpl holder = new EntityHolderImpl().withEntity( ek, persister, entity ); + final var state = (EntityHolderState) ois.readObject(); + final var holder = new EntityHolderImpl().withEntity( ek, persister, entity ); holder.state = state; if ( proxy != null ) { - final LazyInitializer lazyInitializer = extractLazyInitializer( proxy ); + final var lazyInitializer = extractLazyInitializer( proxy ); if ( lazyInitializer != null ) { lazyInitializer.setSession( session ); holder.proxy = proxy; @@ -2009,8 +1991,8 @@ public static StatefulPersistenceContext deserialize( LOG.trace( "Starting deserialization of [" + count + "] collectionEntries entries" ); } for ( int i = 0; i < count; i++ ) { - final PersistentCollection pc = (PersistentCollection) ois.readObject(); - final CollectionEntry ce = CollectionEntry.deserialize( ois, session ); + final var pc = (PersistentCollection) ois.readObject(); + final var ce = CollectionEntry.deserialize( ois, session ); pc.setCurrentSession( session ); rtn.putCollectionEntry( pc, ce ); } @@ -2078,11 +2060,9 @@ public void registerInsertedKey(EntityPersister persister, Object id) { if ( insertedKeysMap == null ) { insertedKeysMap = new HashMap<>(); } - final String rootEntityName = persister.getRootEntityName(); - HashSet insertedEntityIds = insertedKeysMap.computeIfAbsent( - rootEntityName, - k -> new HashSet<>() - ); + final var insertedEntityIds = + insertedKeysMap.computeIfAbsent( persister.getRootEntityName(), + k -> new HashSet<>() ); insertedEntityIds.add( id ); } } @@ -2092,7 +2072,8 @@ public boolean wasInsertedDuringTransaction(EntityPersister persister, Object id // again, we only really care if the entity is cached if ( persister.canWriteToCache() ) { if ( insertedKeysMap != null ) { - final HashSet insertedEntityIds = insertedKeysMap.get( persister.getRootEntityName() ); + final var insertedEntityIds = + insertedKeysMap.get( persister.getRootEntityName() ); if ( insertedEntityIds != null ) { return insertedEntityIds.contains( id ); } @@ -2278,7 +2259,10 @@ public EntityHolderImpl withProxy(EntityKey entityKey, EntityPersister descripto } public EntityHolderImpl withData(EntityKey entityKey, EntityPersister descriptor, Object entity, Object proxy) { - assert entityKey != null && descriptor != null && entityInitializer == null && state == EntityHolderState.UNINITIALIZED; + assert entityKey != null + && descriptor != null + && entityInitializer == null + && state == EntityHolderState.UNINITIALIZED; this.entityKey = entityKey; this.descriptor = descriptor; this.entity = entity; @@ -2309,7 +2293,7 @@ public NaturalIdResolutions getNaturalIdResolutions() { @Override public EntityHolder detachEntity(EntityKey key) { - final EntityHolderImpl entityHolder = removeHolder( key ); + final var entityHolder = removeHolder( key ); if ( entityHolder != null ) { entityHolder.state = EntityHolderState.DETACHED; } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/TwoPhaseLoad.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/TwoPhaseLoad.java index 2d6a97705e90..545735ddbdc9 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/TwoPhaseLoad.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/TwoPhaseLoad.java @@ -5,14 +5,10 @@ package org.hibernate.engine.internal; import org.hibernate.LockMode; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.EntityHolder; import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.Status; import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.proxy.LazyInitializer; import static org.hibernate.proxy.HibernateProxy.extractLazyInitializer; @@ -43,9 +39,9 @@ public static void addUninitializedCachedEntity( final LockMode lockMode, final Object version, final SharedSessionContractImplementor session) { - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final EntityHolder entityHolder = persistenceContext.addEntityHolder( key, object ); - final EntityEntry entityEntry = persistenceContext.addEntry( + final var persistenceContext = session.getPersistenceContextInternal(); + final var entityHolder = persistenceContext.addEntityHolder( key, object ); + final var entityEntry = persistenceContext.addEntry( object, Status.LOADING, null, @@ -61,7 +57,7 @@ public static void addUninitializedCachedEntity( final Object proxy = entityHolder.getProxy(); if ( proxy != null ) { // there is already a proxy for this impl - final LazyInitializer lazyInitializer = extractLazyInitializer( proxy ); + final var lazyInitializer = extractLazyInitializer( proxy ); assert lazyInitializer != null; lazyInitializer.setImplementation( object ); } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/UnsavedValueFactory.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/UnsavedValueFactory.java index f553a6a70202..845b50612111 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/UnsavedValueFactory.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/UnsavedValueFactory.java @@ -9,7 +9,6 @@ import org.hibernate.engine.spi.IdentifierValue; import org.hibernate.engine.spi.VersionValue; import org.hibernate.mapping.KeyValue; -import org.hibernate.mapping.KeyValue.NullValueSemantic; import org.hibernate.property.access.spi.Getter; import org.hibernate.type.descriptor.java.JavaType; import org.hibernate.type.descriptor.java.VersionJavaType; @@ -35,7 +34,7 @@ public static IdentifierValue getUnsavedIdentifierValue( JavaType idJavaType, Getter getter, Supplier templateInstanceAccess) { - final NullValueSemantic nullValueSemantic = bootIdMapping.getNullValueSemantic(); + final var nullValueSemantic = bootIdMapping.getNullValueSemantic(); return nullValueSemantic == null ? inferUnsavedIdentifierValue( idJavaType, getter, templateInstanceAccess ) : switch ( nullValueSemantic ) { @@ -75,9 +74,9 @@ public static VersionValue getUnsavedVersionValue( VersionJavaType versionJavaType, Getter getter, Supplier templateInstanceAccess) { - final NullValueSemantic nullValueSemantic = bootVersionMapping.getNullValueSemantic(); + final var nullValueSemantic = bootVersionMapping.getNullValueSemantic(); return nullValueSemantic == null - ? inferUnsavedVersionValue( versionJavaType, getter, templateInstanceAccess ) + ? inferUnsavedVersionValue( getter, templateInstanceAccess ) : switch ( nullValueSemantic ) { case UNDEFINED -> VersionValue.UNDEFINED; case NULL -> VersionValue.NULL; @@ -88,8 +87,7 @@ public static VersionValue getUnsavedVersionValue( }; } - private static VersionValue inferUnsavedVersionValue( - VersionJavaType versionJavaType, Getter getter, Supplier templateInstanceAccess) { + private static VersionValue inferUnsavedVersionValue(Getter getter, Supplier templateInstanceAccess) { if ( getter != null && templateInstanceAccess != null ) { final Object defaultValue = getter.get( templateInstanceAccess.get() ); // if the version of a newly instantiated object is null diff --git a/hibernate-core/src/main/java/org/hibernate/engine/internal/Versioning.java b/hibernate-core/src/main/java/org/hibernate/engine/internal/Versioning.java index 0c6ac9bbc5c7..a2df375a98d4 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/internal/Versioning.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/internal/Versioning.java @@ -125,7 +125,9 @@ public static Object incrementVersion( */ public static Object increment(Object version, EntityVersionMapping versionMapping, SharedSessionContractImplementor session) { @SuppressWarnings("unchecked") - final VersionJavaType versionType = (VersionJavaType) versionMapping.getJavaType(); + final var versionType = + (VersionJavaType) // Unsafe cast + versionMapping.getJavaType(); final Object next = versionType.next( version, versionMapping.getLength(), @@ -178,15 +180,15 @@ public static boolean isVersionIncrementRequired( if ( hasDirtyCollections ) { return true; } - - if ( dirtyProperties != null ) { - for ( int dirtyProperty : dirtyProperties ) { - if ( propertyVersionability[dirtyProperty] ) { - return true; + else { + if ( dirtyProperties != null ) { + for ( int dirtyProperty : dirtyProperties ) { + if ( propertyVersionability[dirtyProperty] ) { + return true; + } } } + return false; } - - return false; } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/CollectionEntry.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/CollectionEntry.java index 1309e479b9d0..5e547ee21856 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/CollectionEntry.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/CollectionEntry.java @@ -152,9 +152,9 @@ private CollectionEntry( * Determine if the collection is "really" dirty, by checking dirtiness * of the collection elements, if necessary */ - private void dirty(PersistentCollection collection) throws HibernateException { + private void dirty(PersistentCollection collection) { - final CollectionPersister loadedPersister = getLoadedPersister(); + final var loadedPersister = getLoadedPersister(); final boolean forceDirty = collection.wasInitialized() && !collection.isDirty() //optimization @@ -168,18 +168,18 @@ private void dirty(PersistentCollection collection) throws HibernateException } - public void preFlush(PersistentCollection collection) throws HibernateException { + public void preFlush(PersistentCollection collection) { if ( loadedKey == null && collection.getKey() != null ) { loadedKey = collection.getKey(); } - final CollectionPersister loadedPersister = getLoadedPersister(); + final var loadedPersister = getLoadedPersister(); final boolean nonMutableChange = collection.isDirty() && loadedPersister != null && !loadedPersister.isMutable(); if ( nonMutableChange ) { - throw new HibernateException( "changed an immutable collection instance: " + + throw new HibernateException( "Immutable collection was modified: " + collectionInfoString( castNonNull( loadedPersister ).getRole(), getLoadedKey() ) ); } @@ -197,12 +197,12 @@ public void preFlush(PersistentCollection collection) throws HibernateExcepti setDorecreate( false ); } - public void postInitialize(PersistentCollection collection, SharedSessionContractImplementor session) - throws HibernateException { - final CollectionPersister loadedPersister = getLoadedPersister(); - snapshot = loadedPersister != null && loadedPersister.isMutable() - ? collection.getSnapshot( loadedPersister ) - : null; + public void postInitialize(PersistentCollection collection, SharedSessionContractImplementor session) { + final var loadedPersister = getLoadedPersister(); + snapshot = + loadedPersister != null && loadedPersister.isMutable() + ? collection.getSnapshot( loadedPersister ) + : null; collection.setSnapshot( loadedKey, role, snapshot ); if ( loadedPersister != null && session.getLoadQueryInfluencers().effectivelyBatchLoadable( loadedPersister ) ) { @@ -214,7 +214,7 @@ public void postInitialize(PersistentCollection collection, SharedSessionCont /** * Called after a successful flush */ - public void postFlush(PersistentCollection collection) throws HibernateException { + public void postFlush(PersistentCollection collection) { if ( isIgnore() ) { ignore = false; } @@ -232,12 +232,13 @@ public void afterAction(PersistentCollection collection) { loadedKey = getCurrentKey(); setLoadedPersister( getCurrentPersister() ); - final boolean resnapshot = collection.wasInitialized() - && ( isDoremove() || isDorecreate() || isDoupdate() ); - if ( resnapshot ) { - snapshot = loadedPersister != null && loadedPersister.isMutable() - ? collection.getSnapshot( castNonNull( loadedPersister ) ) - : null; //re-snapshot + if ( collection.wasInitialized() + && ( isDoremove() || isDorecreate() || isDoupdate() ) ) { + // update the snapshot + snapshot = + loadedPersister != null && loadedPersister.isMutable() + ? collection.getSnapshot( castNonNull( loadedPersister ) ) + : null; } collection.postAction(); @@ -384,7 +385,7 @@ public String toString() { /** * Get the collection orphans (entities which were removed from the collection) */ - public Collection getOrphans(String entityName, PersistentCollection collection) throws HibernateException { + public Collection getOrphans(String entityName, PersistentCollection collection) { if ( snapshot == null ) { throw new AssertionFailure( "no collection snapshot for orphan delete" ); } @@ -395,7 +396,7 @@ public boolean isSnapshotEmpty(PersistentCollection collection) { //TODO: does this really need to be here? // does the collection already have // it's own up-to-date snapshot? - final CollectionPersister loadedPersister = getLoadedPersister(); + final var loadedPersister = getLoadedPersister(); final Serializable snapshot = getSnapshot(); return collection.wasInitialized() && ( loadedPersister == null || loadedPersister.isMutable() ) diff --git a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java index bb8a28d3ea5d..87445914da21 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java @@ -10,7 +10,6 @@ import jakarta.persistence.criteria.CriteriaDelete; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaUpdate; -import jakarta.persistence.criteria.CommonAbstractCriteria; import org.checkerframework.checker.nullness.qual.Nullable; import org.hibernate.CacheMode; @@ -19,7 +18,6 @@ import org.hibernate.HibernateException; import org.hibernate.Interceptor; import org.hibernate.LockMode; -import org.hibernate.LockOptions; import org.hibernate.SessionEventListener; import org.hibernate.SessionException; import org.hibernate.Transaction; @@ -52,12 +50,10 @@ import org.hibernate.jdbc.Work; import org.hibernate.jdbc.WorkExecutorVisitable; import org.hibernate.metamodel.MappingMetamodel; -import org.hibernate.metamodel.model.domain.ManagedDomainType; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.procedure.ProcedureCall; import org.hibernate.procedure.internal.ProcedureCallImpl; -import org.hibernate.procedure.spi.NamedCallableQueryMemento; import org.hibernate.query.CommonQueryContract; import org.hibernate.query.IllegalMutationQueryException; import org.hibernate.query.IllegalNamedQueryOptionsException; @@ -88,7 +84,6 @@ import org.hibernate.query.sqm.tree.SqmStatement; import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement; import org.hibernate.query.sqm.tree.select.SqmQueryGroup; -import org.hibernate.query.sqm.tree.select.SqmQuerySpec; import org.hibernate.query.sqm.tree.select.SqmSelectStatement; import org.hibernate.query.sqm.tree.update.SqmUpdateStatement; import org.hibernate.resource.jdbc.internal.EmptyStatementInspector; @@ -99,7 +94,6 @@ import org.hibernate.resource.transaction.TransactionRequiredForJoinException; import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl; import org.hibernate.resource.transaction.spi.TransactionCoordinator; -import org.hibernate.stat.spi.StatisticsImplementor; import org.hibernate.type.format.FormatMapper; import org.hibernate.type.spi.TypeConfiguration; @@ -204,7 +198,7 @@ public AbstractSharedSessionContract(SessionFactoryImpl factory, SessionCreation isTransactionCoordinatorShared = isTransactionCoordinatorShared( options ); if ( isTransactionCoordinatorShared ) { - final SharedSessionCreationOptions sharedOptions = (SharedSessionCreationOptions) options; + final var sharedOptions = (SharedSessionCreationOptions) options; if ( options.getConnection() != null ) { throw new SessionException( "Cannot simultaneously share transaction context and specify connection" ); } @@ -298,7 +292,7 @@ private static Object getTenantId( SessionFactoryOptions factoryOptions, Session private static SessionEventListenerManager createSessionEventsManager( SessionFactoryOptions factoryOptions, SessionCreationOptions options) { - final List customListeners = options.getCustomSessionEventListener(); + final var customListeners = options.getCustomSessionEventListener(); return customListeners == null ? new SessionEventListenerManagerImpl( factoryOptions.buildSessionEventListeners() ) : new SessionEventListenerManagerImpl( customListeners ); @@ -333,7 +327,7 @@ void beforeTransactionCompletionEvents() { void afterTransactionCompletionEvents(boolean successful) { getEventListenerManager().transactionCompletion(successful); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.endTransaction(successful); } @@ -705,11 +699,11 @@ public JdbcConnectionAccess getJdbcConnectionAccess() { private boolean useSchemaBasedMultiTenancy() { return tenantIdentifier != null - && factory.getSessionFactoryOptions().getTenantSchemaMapper() != null; + && getSessionFactoryOptions().getTenantSchemaMapper() != null; } private String tenantSchema() { - final var mapper = factory.getSessionFactoryOptions().getTenantSchemaMapper(); + final var mapper = getSessionFactoryOptions().getTenantSchemaMapper(); return mapper == null ? null : normalizeSchemaName( mapper.schemaName( tenantIdentifier ) ); } @@ -853,7 +847,7 @@ public SelectionQuery createSelectionQuery(String hqlString) { private SelectionQuery interpretAndCreateSelectionQuery(String hql, Class resultType) { checksBeforeQueryCreation(); try { - final HqlInterpretation interpretation = interpretHql( hql, resultType ); + final var interpretation = interpretHql( hql, resultType ); checkSelectionQuery( hql, interpretation ); return createSelectionQuery( hql, resultType, interpretation ); } @@ -864,7 +858,7 @@ private SelectionQuery interpretAndCreateSelectionQuery(String hql, Class } private SelectionQuery createSelectionQuery(String hql, Class resultType, HqlInterpretation interpretation) { - final SqmSelectionQueryImpl query = new SqmSelectionQueryImpl<>( hql, interpretation, resultType, this ); + final var query = new SqmSelectionQueryImpl<>( hql, interpretation, resultType, this ); if ( resultType != null ) { checkResultType( resultType, query ); } @@ -884,7 +878,7 @@ protected static void checkSelectionQuery(String hql, HqlInterpretation hqlIn } protected static void checkResultType(Class expectedResultType, SqmSelectionQueryImpl query) { - final Class resultType = query.getResultType(); + final var resultType = query.getResultType(); if ( !expectedResultType.isAssignableFrom( resultType ) ) { throw new QueryTypeMismatchException( String.format( @@ -904,7 +898,7 @@ public SelectionQuery createSelectionQuery(String hqlString, Class exp @Override public SelectionQuery createSelectionQuery(String hqlString, EntityGraph resultGraph) { - final RootGraph rootGraph = (RootGraph) resultGraph; + final var rootGraph = (RootGraph) resultGraph; return interpretAndCreateSelectionQuery( hqlString, rootGraph.getGraphedType().getJavaType() ) .setEntityGraph( resultGraph, GraphSemantic.LOAD ); } @@ -925,8 +919,8 @@ public SelectionQuery createSelectionQuery(CriteriaQuery criteria) { public QueryImplementor createQuery(String queryString, Class expectedResultType) { checksBeforeQueryCreation(); try { - final HqlInterpretation interpretation = interpretHql( queryString, expectedResultType ); - final SqmQueryImpl query = new SqmQueryImpl<>( queryString, interpretation, expectedResultType, this ); + final var interpretation = interpretHql( queryString, expectedResultType ); + final var query = new SqmQueryImpl<>( queryString, interpretation, expectedResultType, this ); applyQuerySettingsAndHints( query ); query.setComment( queryString ); return query; @@ -941,18 +935,18 @@ public QueryImplementor createQuery(String queryString, Class expected public QueryImplementor createQuery(TypedQueryReference typedQueryReference) { checksBeforeQueryCreation(); if ( typedQueryReference instanceof SelectionSpecificationImpl specification ) { - final CriteriaQuery query = specification.buildCriteria( getCriteriaBuilder() ); + final var query = specification.buildCriteria( getCriteriaBuilder() ); return new SqmQueryImpl<>( (SqmStatement) query, specification.getResultType(), this ); } else if ( typedQueryReference instanceof MutationSpecificationImpl specification ) { - final CommonAbstractCriteria query = specification.buildCriteria( getCriteriaBuilder() ); + final var query = specification.buildCriteria( getCriteriaBuilder() ); return new SqmQueryImpl<>( (SqmStatement) query, (Class) specification.getResultType(), this ); } else { @SuppressWarnings("unchecked") // this cast is fine because of all our impls of TypedQueryReference return Class - final Class resultType = (Class) typedQueryReference.getResultType(); - final QueryImplementor query = + final var resultType = (Class) typedQueryReference.getResultType(); + final var query = buildNamedQuery( typedQueryReference.getName(), memento -> createSqmQueryImplementor( resultType, memento ), memento -> createNativeQueryImplementor( resultType, memento ) ); @@ -989,8 +983,8 @@ private NativeQueryImpl buildNativeQuery(String sql, String resultSetMapp } try { - final NamedResultSetMappingMemento memento = getResultSetMappingMemento( resultSetMappingName ); - final NativeQueryImpl query = new NativeQueryImpl<>( sql, memento, resultClass, this ); + final var memento = getResultSetMappingMemento( resultSetMappingName ); + final var query = new NativeQueryImpl<>( sql, memento, resultClass, this ); if ( isEmpty( query.getComment() ) ) { query.setComment( "dynamic native SQL query" ); } @@ -1003,7 +997,7 @@ private NativeQueryImpl buildNativeQuery(String sql, String resultSetMapp } protected NamedResultSetMappingMemento getResultSetMappingMemento(String resultSetMappingName) { - final NamedResultSetMappingMemento resultSetMappingMemento = + final var resultSetMappingMemento = namedObjectRepository().getResultSetMappingMemento( resultSetMappingName ); if ( resultSetMappingMemento == null ) { throw new HibernateException( "No result set mapping with given name '" + resultSetMappingName + "'" ); @@ -1013,7 +1007,7 @@ protected NamedResultSetMappingMemento getResultSetMappingMemento(String resultS private NativeQueryImplementor buildNativeQuery(String sql, @Nullable Class resultClass) { try { - final NativeQueryImplementor query = new NativeQueryImpl<>( sql, resultClass, this ); + final var query = new NativeQueryImpl<>( sql, resultClass, this ); if ( isEmpty( query.getComment() ) ) { query.setComment( "dynamic native SQL query" ); } @@ -1047,7 +1041,7 @@ private MappingMetamodel getMappingMetamodel() { @Override public NativeQueryImplementor createNativeQuery(String sqlString, Class resultClass, String tableAlias) { checksBeforeQueryCreation(); - final NativeQueryImplementor query = buildNativeQuery( sqlString, resultClass ); + final var query = buildNativeQuery( sqlString, resultClass ); if ( getMappingMetamodel().isEntityClass( resultClass ) ) { query.addEntity( tableAlias, resultClass, LockMode.READ ); return query; @@ -1134,11 +1128,11 @@ private SelectionQuery createNamedNativeSelectionQuery( private SqmSelectionQuery createNamedSqmSelectionQuery( NamedSqmQueryMemento memento, Class expectedResultType) { - final SqmSelectionQuery selectionQuery = memento.toSelectionQuery( expectedResultType, this ); + final var selectionQuery = memento.toSelectionQuery( expectedResultType, this ); final String comment = memento.getComment(); selectionQuery.setComment( isEmpty( comment ) ? "Named query: " + memento.getRegistrationName() : comment ); applyQuerySettingsAndHints( selectionQuery ); - final LockOptions lockOptions = memento.getLockOptions(); + final var lockOptions = memento.getLockOptions(); if ( lockOptions != null ) { selectionQuery.getLockOptions().overlay( lockOptions ); } @@ -1176,13 +1170,13 @@ protected Q buildNamedQuery( // this method can be called for either a named HQL query or a named native query // first see if it is a named HQL query - final NamedSqmQueryMemento namedSqmQueryMemento = getSqmQueryMemento( queryName ); + final var namedSqmQueryMemento = getSqmQueryMemento( queryName ); if ( namedSqmQueryMemento != null ) { return sqmCreator.apply( (NamedSqmQueryMemento) namedSqmQueryMemento ); } // otherwise, see if it is a named native query - final NamedNativeQueryMemento namedNativeDescriptor = getNativeQueryMemento( queryName ); + final var namedNativeDescriptor = getNativeQueryMemento( queryName ); if ( namedNativeDescriptor != null ) { return nativeCreator.apply( (NamedNativeQueryMemento) namedNativeDescriptor ); } @@ -1206,7 +1200,7 @@ else if ( e instanceof IllegalArgumentException ) { } protected NativeQueryImplementor createNativeQueryImplementor(NamedNativeQueryMemento memento) { - final NativeQueryImplementor query = memento.toQuery(this ); + final var query = memento.toQuery(this ); if ( isEmpty( query.getComment() ) ) { query.setComment( "dynamic native SQL query" ); } @@ -1215,7 +1209,7 @@ protected NativeQueryImplementor createNativeQueryImplementor(NamedNative } protected SqmQueryImplementor createSqmQueryImplementor(NamedSqmQueryMemento memento) { - final SqmQueryImplementor query = memento.toQuery( this ); + final var query = memento.toQuery( this ); if ( isEmpty( query.getComment() ) ) { query.setComment( "dynamic query" ); } @@ -1227,7 +1221,7 @@ protected SqmQueryImplementor createSqmQueryImplementor(NamedSqmQueryMeme } protected NativeQueryImplementor createNativeQueryImplementor(Class resultType, NamedNativeQueryMemento memento) { - final NativeQueryImplementor query = memento.toQuery(this, resultType ); + final var query = memento.toQuery(this, resultType ); if ( isEmpty( query.getComment() ) ) { query.setComment( "dynamic native SQL query" ); } @@ -1236,7 +1230,7 @@ protected NativeQueryImplementor createNativeQueryImplementor(Class re } protected SqmQueryImplementor createSqmQueryImplementor(Class resultType, NamedSqmQueryMemento memento) { - final SqmQueryImplementor query = memento.toQuery( this, resultType ); + final var query = memento.toQuery( this, resultType ); if ( isEmpty( query.getComment() ) ) { query.setComment( "dynamic query" ); } @@ -1249,7 +1243,7 @@ protected SqmQueryImplementor createSqmQueryImplementor(Class resultTy @Override public NativeQueryImplementor getNamedNativeQuery(String queryName) { - final NamedNativeQueryMemento namedNativeDescriptor = getNativeQueryMemento( queryName ); + final var namedNativeDescriptor = getNativeQueryMemento( queryName ); if ( namedNativeDescriptor != null ) { return namedNativeDescriptor.toQuery( this ); } @@ -1260,7 +1254,7 @@ public NativeQueryImplementor getNamedNativeQuery(String queryName) { @Override public NativeQueryImplementor getNamedNativeQuery(String queryName, String resultSetMapping) { - final NamedNativeQueryMemento namedNativeDescriptor = getNativeQueryMemento( queryName ); + final var namedNativeDescriptor = getNativeQueryMemento( queryName ); if ( namedNativeDescriptor != null ) { return namedNativeDescriptor.toQuery( this, resultSetMapping ); } @@ -1276,8 +1270,8 @@ private RuntimeException noQueryForNameException(String queryName) { @Override public MutationQuery createMutationQuery(String hqlString) { - final QueryImplementor query = createQuery( hqlString ); - final SqmStatement sqmStatement = ( (SqmQueryImplementor) query ).getSqmStatement(); + final var query = createQuery( hqlString ); + final var sqmStatement = ( (SqmQueryImplementor) query ).getSqmStatement(); checkMutationQuery( hqlString, sqmStatement ); return query; } @@ -1290,7 +1284,7 @@ protected static void checkMutationQuery(String hqlString, SqmStatement sqmSt @Override public MutationQuery createNativeMutationQuery(String sqlString) { - final NativeQueryImplementor query = createNativeQuery( sqlString ); + final var query = createNativeQuery( sqlString ); if ( query.isSelectQuery() == TRUE ) { throw new IllegalMutationQueryException( "Expecting a native mutation query, but found `" + sqlString + "`" ); } @@ -1306,7 +1300,7 @@ public MutationQuery createNamedMutationQuery(String queryName) { } protected NativeQueryImplementor createNativeQueryImplementor(String queryName, NamedNativeQueryMemento memento) { - final NativeQueryImplementor query = memento.toQuery( this ); + final var query = memento.toQuery( this ); final Boolean isUnequivocallySelect = query.isSelectQuery(); if ( isUnequivocallySelect == TRUE ) { throw new IllegalMutationQueryException( @@ -1322,8 +1316,8 @@ protected NativeQueryImplementor createNativeQueryImplementor(String quer } protected SqmQueryImplementor createSqmQueryImplementor(String queryName, NamedSqmQueryMemento memento) { - final SqmQueryImplementor query = memento.toQuery( this ); - final SqmStatement sqmStatement = query.getSqmStatement(); + final var query = memento.toQuery( this ); + final var sqmStatement = query.getSqmStatement(); if ( !( sqmStatement instanceof SqmDmlStatement ) ) { throw new IllegalMutationQueryException( "Expecting a named mutation query '" + queryName + "', but found a select statement" @@ -1378,7 +1372,7 @@ public MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriter public ProcedureCall getNamedProcedureCall(String name) { checkOpen(); - final NamedCallableQueryMemento memento = + final var memento = factory.getQueryEngine().getNamedObjectRepository() .getCallableQueryMemento( name ); if ( memento == null ) { @@ -1403,7 +1397,7 @@ public ProcedureCall createNamedStoredProcedureQuery(String name) { public ProcedureCall createStoredProcedureCall(String procedureName) { checkOpen(); @SuppressWarnings("UnnecessaryLocalVariable") - final ProcedureCall procedureCall = new ProcedureCallImpl<>( this, procedureName ); + final var procedureCall = new ProcedureCallImpl<>( this, procedureName ); // call.setComment( "Dynamic stored procedure call" ); return procedureCall; } @@ -1412,7 +1406,7 @@ public ProcedureCall createStoredProcedureCall(String procedureName) { public ProcedureCall createStoredProcedureCall(String procedureName, Class... resultClasses) { checkOpen(); @SuppressWarnings("UnnecessaryLocalVariable") - final ProcedureCall procedureCall = new ProcedureCallImpl<>( this, procedureName, resultClasses ); + final var procedureCall = new ProcedureCallImpl<>( this, procedureName, resultClasses ); // call.setComment( "Dynamic stored procedure call" ); return procedureCall; } @@ -1421,7 +1415,7 @@ public ProcedureCall createStoredProcedureCall(String procedureName, Class... public ProcedureCall createStoredProcedureCall(String procedureName, String... resultSetMappings) { checkOpen(); @SuppressWarnings("UnnecessaryLocalVariable") - final ProcedureCall procedureCall = new ProcedureCallImpl<>( this, procedureName, resultSetMappings ); + final var procedureCall = new ProcedureCallImpl<>( this, procedureName, resultSetMappings ); // call.setComment( "Dynamic stored procedure call" ); return procedureCall; } @@ -1430,7 +1424,7 @@ public ProcedureCall createStoredProcedureCall(String procedureName, String... r public ProcedureCall createStoredProcedureQuery(String procedureName) { checkOpen(); @SuppressWarnings("UnnecessaryLocalVariable") - final ProcedureCall procedureCall = new ProcedureCallImpl<>( this, procedureName ); + final var procedureCall = new ProcedureCallImpl<>( this, procedureName ); // call.setComment( "Dynamic stored procedure call" ); return procedureCall; } @@ -1439,7 +1433,7 @@ public ProcedureCall createStoredProcedureQuery(String procedureName) { public ProcedureCall createStoredProcedureQuery(String procedureName, Class... resultClasses) { checkOpen(); @SuppressWarnings("UnnecessaryLocalVariable") - final ProcedureCall procedureCall = new ProcedureCallImpl<>( this, procedureName, resultClasses ); + final var procedureCall = new ProcedureCallImpl<>( this, procedureName, resultClasses ); // call.setComment( "Dynamic stored procedure call" ); return procedureCall; } @@ -1448,7 +1442,7 @@ public ProcedureCall createStoredProcedureQuery(String procedureName, Class.. public ProcedureCall createStoredProcedureQuery(String procedureName, String... resultSetMappings) { checkOpen(); @SuppressWarnings("UnnecessaryLocalVariable") - final ProcedureCall procedureCall = new ProcedureCallImpl<>( this, procedureName, resultSetMappings ); + final var procedureCall = new ProcedureCallImpl<>( this, procedureName, resultSetMappings ); // call.setComment( "Dynamic stored procedure call" ); return procedureCall; } @@ -1482,6 +1476,12 @@ public HibernateCriteriaBuilder getCriteriaBuilder() { return getFactory().getCriteriaBuilder(); } + private void markForRollbackIfJpaComplianceEnabled() { + if ( getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { + markForRollbackOnly(); + } + } + @Override public QueryImplementor createQuery(CriteriaQuery criteriaQuery) { checkOpen(); @@ -1490,9 +1490,9 @@ public QueryImplementor createQuery(CriteriaQuery criteriaQuery) { } else { try { - final SqmSelectStatement selectStatement = (SqmSelectStatement) criteriaQuery; + final var selectStatement = (SqmSelectStatement) criteriaQuery; if ( ! ( selectStatement.getQueryPart() instanceof SqmQueryGroup ) ) { - final SqmQuerySpec querySpec = selectStatement.getQuerySpec(); + final var querySpec = selectStatement.getQuerySpec(); if ( querySpec.getSelectClause().getSelections().isEmpty() ) { if ( querySpec.getFromClause().getRoots().size() == 1 ) { querySpec.getSelectClause().setSelection( querySpec.getFromClause().getRoots().get(0) ); @@ -1503,9 +1503,7 @@ public QueryImplementor createQuery(CriteriaQuery criteriaQuery) { return createCriteriaQuery( selectStatement, criteriaQuery.getResultType() ); } catch (RuntimeException e) { - if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { - markForRollbackOnly(); - } + markForRollbackIfJpaComplianceEnabled(); throw getExceptionConverter().convert( e ); } } @@ -1518,9 +1516,7 @@ public QueryImplementor createQuery(@SuppressWarnings("rawtypes") CriteriaUpd return createCriteriaQuery( (SqmUpdateStatement) criteriaUpdate, null ); } catch (RuntimeException e) { - if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { - markForRollbackOnly(); - } + markForRollbackIfJpaComplianceEnabled(); throw getExceptionConverter().convert( e ); } } @@ -1532,15 +1528,13 @@ public QueryImplementor createQuery(@SuppressWarnings("rawtypes") CriteriaDel return createCriteriaQuery( (SqmDeleteStatement) criteriaDelete, null ); } catch (RuntimeException e) { - if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { - markForRollbackOnly(); - } + markForRollbackIfJpaComplianceEnabled(); throw getExceptionConverter().convert( e ); } } protected QueryImplementor createCriteriaQuery(SqmStatement criteria, Class resultType) { - final SqmQueryImpl query = new SqmQueryImpl<>( criteria, resultType, this ); + final var query = new SqmQueryImpl<>( criteria, resultType, this ); applyQuerySettingsAndHints( query ); return query; } @@ -1557,14 +1551,14 @@ public RootGraph createEntityGraph(Class rootType, String graphName) { if ( entityGraph == null ) { return null; } - final ManagedDomainType type = getFactory().getJpaMetamodel().managedType( rootType ); - final ManagedDomainType graphedType = entityGraph.getGraphedType(); + final var type = getFactory().getJpaMetamodel().managedType( rootType ); + final var graphedType = entityGraph.getGraphedType(); if ( !Objects.equals( graphedType.getTypeName(), type.getTypeName() ) ) { throw new IllegalArgumentException( "Named entity graph '" + graphName + "' is for type '" + graphedType.getTypeName() + "'"); } @SuppressWarnings("unchecked") // this cast is sound, because we just checked - final RootGraph graph = (RootGraph) entityGraph; + final var graph = (RootGraph) entityGraph; return graph; } @@ -1572,14 +1566,14 @@ public RootGraph createEntityGraph(Class rootType, String graphName) { @Override public RootGraphImplementor createEntityGraph(String graphName) { checkOpen(); - final RootGraphImplementor named = getFactory().findEntityGraphByName( graphName ); + final var named = getFactory().findEntityGraphByName( graphName ); return named == null ? null : named.makeCopy( true ); } @Override public RootGraphImplementor getEntityGraph(String graphName) { checkOpen(); - final RootGraphImplementor named = getFactory().findEntityGraphByName( graphName ); + final var named = getFactory().findEntityGraphByName( graphName ); if ( named == null ) { throw new IllegalArgumentException( "No EntityGraph with given name '" + graphName + "'" ); } @@ -1626,8 +1620,8 @@ public FormatMapper getJsonFormatMapper() { @Override public SessionAssociationMarkers getSessionAssociationMarkers() { - if ( this.sessionAssociationMarkers == null ) { - this.sessionAssociationMarkers = new SessionAssociationMarkers( this ); + if ( sessionAssociationMarkers == null ) { + sessionAssociationMarkers = new SessionAssociationMarkers( this ); } return sessionAssociationMarkers; } diff --git a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java index 38cf9f0cd77c..a5c9b5d47449 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java @@ -18,6 +18,7 @@ import jakarta.persistence.RefreshOption; import jakarta.persistence.Timeout; import jakarta.persistence.TransactionRequiredException; +import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaSelect; import jakarta.persistence.metamodel.EntityType; import jakarta.persistence.metamodel.Metamodel; @@ -35,12 +36,9 @@ import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.LoadQueryInfluencers; import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; -import org.hibernate.event.monitor.spi.EventMonitor; import org.hibernate.event.service.spi.EventListenerGroups; import org.hibernate.event.spi.*; import org.hibernate.event.spi.LoadEventListener.LoadType; @@ -58,19 +56,13 @@ import org.hibernate.loader.internal.NaturalIdLoadAccessImpl; import org.hibernate.loader.internal.SimpleNaturalIdLoadAccessImpl; import org.hibernate.metamodel.model.domain.EntityDomainType; -import org.hibernate.metamodel.model.domain.ManagedDomainType; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.procedure.ProcedureCall; -import org.hibernate.procedure.spi.NamedCallableQueryMemento; import org.hibernate.proxy.LazyInitializer; import org.hibernate.query.Query; import org.hibernate.query.SelectionQuery; import org.hibernate.query.UnknownSqlResultSetMappingException; -import org.hibernate.query.criteria.CriteriaDefinition; import org.hibernate.query.spi.QueryImplementor; -import org.hibernate.query.sqm.tree.select.SqmQueryGroup; -import org.hibernate.query.sqm.tree.select.SqmQuerySpec; -import org.hibernate.query.sqm.tree.select.SqmSelectStatement; import org.hibernate.resource.jdbc.spi.JdbcSessionOwner; import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode; import org.hibernate.resource.jdbc.spi.StatementInspector; @@ -80,7 +72,6 @@ import org.hibernate.resource.transaction.spi.TransactionStatus; import org.hibernate.stat.SessionStatistics; import org.hibernate.stat.internal.SessionStatisticsImpl; -import org.hibernate.stat.spi.StatisticsImplementor; import org.hibernate.type.descriptor.WrapperOptions; import java.io.IOException; @@ -134,6 +125,7 @@ import static org.hibernate.jpa.SpecHints.HINT_SPEC_LOCK_TIMEOUT; import static org.hibernate.jpa.SpecHints.HINT_SPEC_QUERY_TIMEOUT; import static org.hibernate.jpa.internal.util.CacheModeHelper.interpretCacheMode; +import static org.hibernate.jpa.internal.util.ConfigurationHelper.getBoolean; import static org.hibernate.jpa.internal.util.FlushModeTypeHelper.getFlushModeType; import static org.hibernate.pretty.MessageHelper.infoString; import static org.hibernate.proxy.HibernateProxy.extractLazyInitializer; @@ -198,7 +190,7 @@ public class SessionImpl public SessionImpl(SessionFactoryImpl factory, SessionCreationOptions options) { super( factory, options ); - final DiagnosticEvent sessionOpenEvent = getEventMonitor().beginSessionOpenEvent(); + final var sessionOpenEvent = getEventMonitor().beginSessionOpenEvent(); try { persistenceContext = createPersistenceContext(); actionQueue = createActionQueue(); @@ -230,7 +222,7 @@ public SessionImpl(SessionFactoryImpl factory, SessionCreationOptions options) { setUpMultitenancy( factory, loadQueryInfluencers ); - final StatisticsImplementor statistics = factory.getStatistics(); + final var statistics = factory.getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.openSession(); } @@ -284,7 +276,7 @@ protected void applyQuerySettingsAndHints(SelectionQuery query) { } protected void applyLockOptionsHint(SelectionQuery query) { - final LockOptions lockOptionsForRead = getLockOptionsForRead(); + final var lockOptionsForRead = getLockOptionsForRead(); if ( lockOptionsForRead.getLockMode() != LockMode.NONE ) { query.setLockMode( getLockMode( lockOptionsForRead.getLockMode() ) ); } @@ -386,8 +378,8 @@ public void closeWithoutOpenChecks() { log.tracef( "Closing session [%s]", getSessionIdentifier() ); } - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent sessionClosedEvent = eventMonitor.beginSessionClosedEvent(); + final var eventMonitor = getEventMonitor(); + final var sessionClosedEvent = eventMonitor.beginSessionClosedEvent(); try { if ( isJpaBootstrap() ) { // Original HEM close behavior @@ -413,7 +405,7 @@ public void closeWithoutOpenChecks() { } } finally { - final StatisticsImplementor statistics = getSessionFactory().getStatistics(); + final var statistics = getSessionFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.closeSession(); } @@ -540,7 +532,7 @@ public LockMode getCurrentLockMode(Object object) { throw new NullPointerException( "null object passed to getCurrentLockMode()" ); } - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { object = lazyInitializer.getImplementation( this ); if ( object == null ) { @@ -548,7 +540,7 @@ public LockMode getCurrentLockMode(Object object) { } } - final EntityEntry entry = getEntityEntry( object ); + final var entry = getEntityEntry( object ); if ( entry.getStatus().isDeletedOrGone() ) { throw new ObjectDeletedException( "Given entity was removed", entry.getId(), entry.getPersister().getEntityName() ); @@ -620,7 +612,7 @@ public void lock(String entityName, Object object, LockOptions lockOptions) { @Override public void lock(Object object, LockMode lockMode) { - final LockOptions lockOptions = copySessionLockOptions(); + final var lockOptions = copySessionLockOptions(); lockOptions.setLockMode( lockMode ); fireLock( new LockEvent( object, lockOptions, this ) ); } @@ -875,7 +867,7 @@ public void removeOrphanBeforeUpdates(String entityName, Object child) { private void logRemoveOrphanBeforeUpdates(String timing, String entityName, Object entity) { if ( log.isTraceEnabled() ) { - final EntityEntry entityEntry = persistenceContext.getEntry( entity ); + final var entityEntry = persistenceContext.getEntry( entity ); log.tracef( "%s remove orphan before updates: [%s]", timing, @@ -1015,23 +1007,23 @@ public Object get(String entityName, Object id) { @Override public Object immediateLoad(String entityName, Object id) { if ( log.isDebugEnabled() ) { - final EntityPersister persister = requireEntityPersister( entityName ); + final var persister = requireEntityPersister( entityName ); log.tracef( "Initializing proxy: %s", infoString( persister, id, getFactory() ) ); } final LoadEvent event = makeLoadEvent( entityName, id, getReadOnlyFromLoadQueryInfluencers(), true ); fireLoadNoChecks( event, IMMEDIATE_LOAD ); final Object result = event.getResult(); releaseLoadEvent( event ); - final LazyInitializer lazyInitializer = extractLazyInitializer( result ); + final var lazyInitializer = extractLazyInitializer( result ); return lazyInitializer != null ? lazyInitializer.getImplementation() : result; } @Override public Object internalLoad(String entityName, Object id, boolean eager, boolean nullable) { final LoadType type = internalLoadType( eager, nullable ); - final EffectiveEntityGraph effectiveEntityGraph = loadQueryInfluencers.getEffectiveEntityGraph(); - final GraphSemantic semantic = effectiveEntityGraph.getSemantic(); - final RootGraphImplementor graph = effectiveEntityGraph.getGraph(); + final var effectiveEntityGraph = loadQueryInfluencers.getEffectiveEntityGraph(); + final var semantic = effectiveEntityGraph.getSemantic(); + final var graph = effectiveEntityGraph.getGraph(); boolean clearedEffectiveGraph; if ( semantic == null || graph.appliesTo( getFactory().getJpaMetamodel().entity( entityName ) ) ) { @@ -1558,7 +1550,7 @@ public Object getIdentifier(Object object) { if ( object == null ) { throw new IllegalArgumentException( "Entity may not be null" ); } - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { checkOwnsProxy( lazyInitializer ); return lazyInitializer.getInternalIdentifier(); @@ -1576,19 +1568,18 @@ public Object getIdentifier(Object object) { @Override public Object getContextEntityIdentifier(Object object) { checkOpenOrWaitingForAutoClose(); - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { return lazyInitializer.getInternalIdentifier(); } else if ( isPersistentAttributeInterceptable( object ) ) { - final PersistentAttributeInterceptor interceptor = - asPersistentAttributeInterceptable( object ).$$_hibernate_getInterceptor(); - if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor ) { - return ( (EnhancementAsProxyLazinessInterceptor) interceptor ).getIdentifier(); + if ( asPersistentAttributeInterceptable( object ).$$_hibernate_getInterceptor() + instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { + return lazinessInterceptor.getIdentifier(); } } - final EntityEntry entry = persistenceContext.getEntry( object ); + final var entry = persistenceContext.getEntry( object ); return entry != null ? entry.getId() : null; } @@ -1602,7 +1593,7 @@ public boolean contains(Object object) { } try { - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { // don't use proxiesByKey, since not all // proxies that point to this session's @@ -1625,7 +1616,7 @@ public boolean contains(Object object) { // A session is considered to contain an entity only if the entity has // an entry in the session's persistence context and the entry reports // that the entity has not been removed - final EntityEntry entry = persistenceContext.getEntry( object ); + final var entry = persistenceContext.getEntry( object ); delayedAfterCompletion(); if ( entry == null ) { @@ -1670,7 +1661,7 @@ public boolean contains(String entityName, Object object) { } try { - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer == null && persistenceContext.getEntry( object ) == null ) { // check if it is an entity -> if not throw an exception (per JPA) try { @@ -1702,7 +1693,7 @@ public boolean contains(String entityName, Object object) { // A session is considered to contain an entity only if the entity has // an entry in the session's persistence context and the entry reports // that the entity has not been removed - final EntityEntry entry = persistenceContext.getEntry( object ); + final var entry = persistenceContext.getEntry( object ); delayedAfterCompletion(); return entry != null && !entry.getStatus().isDeletedOrGone(); } @@ -1737,31 +1728,7 @@ public ProcedureCall createStoredProcedureCall(String procedureName, Class... @Override public QueryImplementor createQuery(CriteriaSelect selectQuery) { - checkOpen(); - if ( selectQuery instanceof CriteriaDefinition criteriaDefinition ) { - return (QueryImplementor) criteriaDefinition.createSelectionQuery(this); - } - else { - try { - final SqmSelectStatement selectStatement = (SqmSelectStatement) selectQuery; - if ( ! ( selectStatement.getQueryPart() instanceof SqmQueryGroup ) ) { - final SqmQuerySpec querySpec = selectStatement.getQuerySpec(); - if ( querySpec.getSelectClause().getSelections().isEmpty() ) { - if ( querySpec.getFromClause().getRoots().size() == 1 ) { - querySpec.getSelectClause().setSelection( querySpec.getFromClause().getRoots().get(0) ); - } - } - } - - return createCriteriaQuery( selectStatement, selectStatement.getResultType() ); - } - catch (RuntimeException e) { - if ( getSessionFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() ) { - markForRollbackOnly(); - } - throw getExceptionConverter().convert( e ); - } - } + return createQuery( (CriteriaQuery) selectQuery ); } @Override @@ -1776,7 +1743,7 @@ public void initializeCollection(PersistentCollection collection, boolean wri @Override public String bestGuessEntityName(Object object) { - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { // it is possible for this method to be called during flush processing, // so make certain that we do not accidentally initialize an uninitialized proxy @@ -1785,7 +1752,7 @@ public String bestGuessEntityName(Object object) { } object = lazyInitializer.getImplementation(); } - final EntityEntry entry = persistenceContext.getEntry( object ); + final var entry = persistenceContext.getEntry( object ); return entry == null ? guessEntityName( object ) : entry.getPersister().getEntityName(); @@ -1793,7 +1760,7 @@ public String bestGuessEntityName(Object object) { @Override public String bestGuessEntityName(Object object, EntityEntry entry) { - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { // it is possible for this method to be called during flush processing, // so make certain that we do not accidentally initialize an uninitialized proxy @@ -1816,7 +1783,7 @@ public String getEntityName(Object object) { throw new IllegalArgumentException( "Entity may not be null" ); } - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { checkOwnsProxy( lazyInitializer ); object = lazyInitializer.getImplementation(); @@ -1832,7 +1799,7 @@ private void checkOwnsProxy(LazyInitializer lazyInitializer) { } private EntityEntry getEntityEntry(Object object) { - final EntityEntry entry = persistenceContext.getEntry( object ); + final var entry = persistenceContext.getEntry( object ); if ( entry == null ) { throw new IllegalArgumentException( "Given entity is not associated with the persistence context" ); } @@ -1842,12 +1809,12 @@ private EntityEntry getEntityEntry(Object object) { @Override @SuppressWarnings("unchecked") public T getReference(T object) { checkOpen(); - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { return (T) getReference( lazyInitializer.getPersistentClass(), lazyInitializer.getInternalIdentifier() ); } else { - final EntityPersister persister = getEntityPersister( null, object ); + final var persister = getEntityPersister( null, object ); return (T) getReference( persister.getMappedClass(), persister.getIdentifier(object, this) ); } } @@ -1866,7 +1833,7 @@ public void cancelQuery() { @Override public String toString() { - final StringBuilder string = + final var string = new StringBuilder( 500 ) .append( "SessionImpl(" ) .append( System.identityHashCode( this ) ); @@ -2388,7 +2355,7 @@ public T find(Class entityClass, Object primaryKey, LockModeType lockMode if ( lockModeType == null ) { throw new IllegalArgumentException("Given LockModeType was null"); } - final LockMode lockMode = LockModeTypeHelper.getLockMode( lockModeType ); + final var lockMode = LockModeTypeHelper.getLockMode( lockModeType ); checkTransactionNeededForLock( lockMode ); return find( entityClass, primaryKey, buildLockOptions( lockMode, properties ), properties ); } @@ -2528,8 +2495,8 @@ public T find(Class entityClass, Object primaryKey, FindOption... options @Override public T find(EntityGraph entityGraph, Object primaryKey, FindOption... options) { - final RootGraph graph = (RootGraph) entityGraph; - final ManagedDomainType type = graph.getGraphedType(); + final var graph = (RootGraph) entityGraph; + final var type = graph.getGraphedType(); final IdentifierLoadAccessImpl loadAccess = switch ( type.getRepresentationMode() ) { case MAP -> byId( type.getTypeName() ); @@ -2556,7 +2523,7 @@ protected static Boolean readOnlyHint(Map properties) { } else { final Object value = properties.get( HINT_READ_ONLY ); - return value == null ? null : ConfigurationHelper.getBoolean( value ); + return value == null ? null : getBoolean( value ); } } @@ -2600,13 +2567,13 @@ private void checkTransactionNeededForUpdateOperation() { @Override public Object find(String entityName, Object primaryKey) { - final IdentifierLoadAccessImpl loadAccess = byId( entityName ); + final IdentifierLoadAccessImpl loadAccess = byId( entityName ); return loadAccess.load( primaryKey ); } @Override public Object find(String entityName, Object primaryKey, FindOption... options) { - final IdentifierLoadAccessImpl loadAccess = byId( entityName ); + final IdentifierLoadAccessImpl loadAccess = byId( entityName ); setLoadAccessOptions( options, loadAccess ); return loadAccess.load( primaryKey ); } @@ -2657,9 +2624,9 @@ public void lock(Object entity, LockModeType lockModeType, LockOption... options } private LockOptions buildLockOptions(LockMode lockMode, LockOption[] options) { - final LockOptions lockOptions = copySessionLockOptions(); + final var lockOptions = copySessionLockOptions(); lockOptions.setLockMode( lockMode ); - for ( LockOption option : options ) { + for ( var option : options ) { if ( option instanceof PessimisticLockScope lockScope ) { lockOptions.setLockScope( lockScope ); } @@ -2671,7 +2638,7 @@ else if ( option instanceof Timeout timeout ) { } private LockOptions buildLockOptions(LockMode lockMode, Map properties) { - final LockOptions lockOptions = copySessionLockOptions(); + final var lockOptions = copySessionLockOptions(); lockOptions.setLockMode( lockMode ); if ( properties != null ) { applyPropertiesToLockOptions( properties, () -> lockOptions ); @@ -2680,7 +2647,7 @@ private LockOptions buildLockOptions(LockMode lockMode, Map prop } private LockOptions copySessionLockOptions() { - final LockOptions copiedLockOptions = new LockOptions(); + final var copiedLockOptions = new LockOptions(); if ( lockOptions != null ) { LockOptions.copy( lockOptions, copiedLockOptions ); } @@ -2889,7 +2856,7 @@ public Map getProperties() { public ProcedureCall createNamedStoredProcedureQuery(String name) { checkOpen(); try { - final NamedCallableQueryMemento memento = + final var memento = getFactory().getQueryEngine().getNamedObjectRepository() .getCallableQueryMemento( name ); if ( memento == null ) { diff --git a/hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java index 4244af1dd644..3dc033b7c5c2 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java @@ -21,24 +21,16 @@ import org.hibernate.UnresolvableObjectException; import org.hibernate.action.spi.AfterTransactionCompletionProcess; import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor; -import org.hibernate.bytecode.spi.BytecodeEnhancementMetadata; import org.hibernate.cache.CacheException; -import org.hibernate.cache.spi.access.CollectionDataAccess; -import org.hibernate.cache.spi.access.EntityDataAccess; import org.hibernate.cache.spi.access.SoftLock; import org.hibernate.collection.spi.CollectionSemantics; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EffectiveEntityGraph; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.EntityHolder; import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.LoadQueryInfluencers; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper; import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform; -import org.hibernate.event.monitor.spi.EventMonitor; import org.hibernate.event.monitor.spi.DiagnosticEvent; import org.hibernate.event.service.spi.EventListenerGroups; import org.hibernate.event.spi.PostCollectionRecreateEvent; @@ -62,16 +54,10 @@ import org.hibernate.event.spi.PreCollectionUpdateEvent; import org.hibernate.event.spi.PreCollectionUpdateEventListener; import org.hibernate.event.spi.PreDeleteEvent; -import org.hibernate.event.spi.PreDeleteEventListener; import org.hibernate.event.spi.PreInsertEvent; -import org.hibernate.event.spi.PreInsertEventListener; import org.hibernate.event.spi.PreUpdateEvent; -import org.hibernate.event.spi.PreUpdateEventListener; import org.hibernate.event.spi.PreUpsertEvent; -import org.hibernate.event.spi.PreUpsertEventListener; import org.hibernate.generator.BeforeExecutionGenerator; -import org.hibernate.generator.Generator; -import org.hibernate.generator.values.GeneratedValues; import org.hibernate.graph.GraphSemantic; import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.id.IdentifierGenerationException; @@ -81,12 +67,10 @@ import org.hibernate.loader.internal.CacheLoadHelper; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.proxy.LazyInitializer; -import org.hibernate.stat.spi.StatisticsImplementor; -import org.hibernate.tuple.entity.EntityMetamodel; import jakarta.persistence.EntityGraph; import jakarta.transaction.SystemException; +import org.hibernate.stat.spi.StatisticsImplementor; import static org.hibernate.engine.internal.ManagedTypeHelper.asPersistentAttributeInterceptable; import static org.hibernate.engine.internal.ManagedTypeHelper.isPersistentAttributeInterceptable; @@ -160,6 +144,10 @@ public FlushMode getHibernateFlushMode() { return FlushMode.MANUAL; } + private StatisticsImplementor getStatistics() { + return getFactory().getStatistics(); + } + // inserts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @Override @@ -184,7 +172,7 @@ public void insertMultiple(List entities) { @Override public Object insert(String entityName, Object entity) { checkOpen(); - final EntityPersister persister = getEntityPersister( entityName, entity ); + final var persister = getEntityPersister( entityName, entity ); final Object id; final Object[] state = persister.getValues( entity ); if ( persister.isVersioned() ) { @@ -192,7 +180,7 @@ public Object insert(String entityName, Object entity) { persister.setValues( entity, state ); } } - final Generator generator = persister.getGenerator(); + final var generator = persister.getGenerator(); if ( generator.generatedBeforeExecution( entity, this ) ) { if ( !generator.generatesOnInsert() ) { throw new IdentifierGenerationException( "Identifier generator must generate on insert" ); @@ -205,8 +193,8 @@ public Object insert(String entityName, Object entity) { } else { getInterceptor().onInsert( entity, id, state, persister.getPropertyNames(), persister.getPropertyTypes() ); - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent event = eventMonitor.beginEntityInsertEvent(); + final var eventMonitor = getEventMonitor(); + final var event = eventMonitor.beginEntityInsertEvent(); boolean success = false; try { persister.getInsertCoordinator().insert( entity, id, state, this ); @@ -226,13 +214,12 @@ else if ( generator.generatedOnExecution( entity, this ) ) { } else { getInterceptor().onInsert( entity, null, state, persister.getPropertyNames(), persister.getPropertyTypes() ); - final GeneratedValues generatedValues; - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent event = eventMonitor.beginEntityInsertEvent(); + final var eventMonitor = getEventMonitor(); + final var event = eventMonitor.beginEntityInsertEvent(); boolean success = false; Object generatedId = null; try { - generatedValues = persister.getInsertCoordinator().insert( entity, state, this ); + final var generatedValues = persister.getInsertCoordinator().insert( entity, state, this ); generatedId = castNonNull( generatedValues ).getGeneratedValue( persister.getIdentifierMapping() ); id = generatedId; success = true; @@ -253,8 +240,8 @@ else if ( generator.generatedOnExecution( entity, this ) ) { } else { getInterceptor().onInsert( entity, id, state, persister.getPropertyNames(), persister.getPropertyTypes() ); - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent event = eventMonitor.beginEntityInsertEvent(); + final var eventMonitor = getEventMonitor(); + final var event = eventMonitor.beginEntityInsertEvent(); boolean success = false; try { persister.getInsertCoordinator().insert( entity, id, state, this ); @@ -267,7 +254,7 @@ else if ( generator.generatedOnExecution( entity, this ) ) { } recreateCollections( entity, id, persister ); firePostInsert( entity, id, state, persister ); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.insertEntity( persister.getEntityName() ); } @@ -277,13 +264,13 @@ else if ( generator.generatedOnExecution( entity, this ) ) { private void recreateCollections(Object entity, Object id, EntityPersister persister) { if ( persister.hasOwnedCollections() ) { final String entityName = persister.getEntityName(); - final EventMonitor eventMonitor = getEventMonitor(); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var eventMonitor = getEventMonitor(); + final var statistics = getStatistics(); forEachOwnedCollection( entity, id, persister, (descriptor, collection) -> { final String role = descriptor.getRole(); firePreRecreate( collection, id, entityName, entity ); - final DiagnosticEvent event = eventMonitor.beginCollectionRecreateEvent(); + final var event = eventMonitor.beginCollectionRecreateEvent(); boolean success = false; try { descriptor.recreate( collection, id, this ); @@ -324,15 +311,15 @@ public void deleteMultiple(List entities) { @Override public void delete(String entityName, Object entity) { checkOpen(); - final EntityPersister persister = getEntityPersister( entityName, entity ); + final var persister = getEntityPersister( entityName, entity ); final Object id = persister.getIdentifier( entity, this ); final Object version = persister.getVersion( entity ); if ( !firePreDelete(entity, id, persister) ) { getInterceptor().onDelete( entity, id, persister.getPropertyNames(), persister.getPropertyTypes() ); removeCollections( entity, id, persister ); final Object ck = lockCacheItem( id, version, persister ); - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent event = eventMonitor.beginEntityDeleteEvent(); + final var eventMonitor = getEventMonitor(); + final var event = eventMonitor.beginEntityDeleteEvent(); boolean success = false; try { persister.getDeleteCoordinator().delete( entity, id, version, this ); @@ -343,7 +330,7 @@ public void delete(String entityName, Object entity) { } removeCacheItem( ck, persister ); firePostDelete( entity, id, persister ); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.deleteEntity( persister.getEntityName() ); } @@ -353,8 +340,8 @@ public void delete(String entityName, Object entity) { private void removeCollections(Object entity, Object id, EntityPersister persister) { if ( persister.hasOwnedCollections() ) { final String entityName = persister.getEntityName(); - final EventMonitor eventMonitor = getEventMonitor(); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var eventMonitor = getEventMonitor(); + final var statistics = getStatistics(); forEachOwnedCollection( entity, id, persister, (descriptor, collection) -> { final String role = descriptor.getRole(); @@ -401,7 +388,7 @@ public void updateMultiple(List entities) { @Override public void update(String entityName, Object entity) { checkOpen(); - final EntityPersister persister = getEntityPersister( entityName, entity ); + final var persister = getEntityPersister( entityName, entity ); final Object id = persister.getIdentifier( entity, this ); final Object[] state = persister.getValues( entity ); final Object oldVersion; @@ -417,8 +404,8 @@ public void update(String entityName, Object entity) { if ( !firePreUpdate(entity, id, state, persister) ) { getInterceptor().onUpdate( entity, id, state, persister.getPropertyNames(), persister.getPropertyTypes() ); final Object ck = lockCacheItem( id, oldVersion, persister ); - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent event = eventMonitor.beginEntityUpdateEvent(); + final var eventMonitor = getEventMonitor(); + final var event = eventMonitor.beginEntityUpdateEvent(); boolean success = false; try { persister.getUpdateCoordinator().update( entity, id, null, state, oldVersion, null, null, false, this ); @@ -430,7 +417,7 @@ public void update(String entityName, Object entity) { removeCacheItem( ck, persister ); removeAndRecreateCollections( entity, id, persister ); firePostUpdate( entity, id, state, persister ); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.updateEntity( persister.getEntityName() ); } @@ -440,8 +427,8 @@ public void update(String entityName, Object entity) { private void removeAndRecreateCollections(Object entity, Object id, EntityPersister persister) { if ( persister.hasOwnedCollections() ) { final String entityName = persister.getEntityName(); - final EventMonitor eventMonitor = getEventMonitor(); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var eventMonitor = getEventMonitor(); + final var statistics = getStatistics(); forEachOwnedCollection( entity, id, persister, (descriptor, collection) -> { final String role = descriptor.getRole(); @@ -487,15 +474,15 @@ public void upsertMultiple(List entities) { @Override public void upsert(String entityName, Object entity) { checkOpen(); - final EntityPersister persister = getEntityPersister( entityName, entity ); + final var persister = getEntityPersister( entityName, entity ); final Object id = idToUpsert( entity, persister ); final Object[] state = persister.getValues( entity ); if ( !firePreUpsert(entity, id, state, persister) ) { getInterceptor().onUpsert( entity, id, state, persister.getPropertyNames(), persister.getPropertyTypes() ); final Object oldVersion = versionToUpsert( entity, persister, state ); final Object ck = lockCacheItem( id, oldVersion, persister ); - final EventMonitor eventMonitor = getEventMonitor(); - final DiagnosticEvent event = eventMonitor.beginEntityUpsertEvent(); + final var eventMonitor = getEventMonitor(); + final var event = eventMonitor.beginEntityUpsertEvent(); boolean success = false; try { persister.getMergeCoordinator().update( entity, id, null, state, oldVersion, null, null, false, this ); @@ -505,7 +492,7 @@ public void upsert(String entityName, Object entity) { eventMonitor.completeEntityUpsertEvent( event, id, persister.getEntityName(), success, this ); } removeCacheItem( ck, persister ); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.upsertEntity( persister.getEntityName() ); } @@ -565,8 +552,8 @@ protected boolean firePreInsert(Object entity, Object id, Object[] state, Entity } else { boolean veto = false; - final PreInsertEvent event = new PreInsertEvent( entity, id, state, persister, null ); - for ( PreInsertEventListener listener : eventListenerGroups.eventListenerGroup_PRE_INSERT.listeners() ) { + final var event = new PreInsertEvent( entity, id, state, persister, null ); + for ( var listener : eventListenerGroups.eventListenerGroup_PRE_INSERT.listeners() ) { veto |= listener.onPreInsert( event ); } return veto; @@ -580,8 +567,8 @@ protected boolean firePreUpdate(Object entity, Object id, Object[] state, Entity } else { boolean veto = false; - final PreUpdateEvent event = new PreUpdateEvent( entity, id, state, null, persister, null ); - for ( PreUpdateEventListener listener : eventListenerGroups.eventListenerGroup_PRE_UPDATE.listeners() ) { + final var event = new PreUpdateEvent( entity, id, state, null, persister, null ); + for ( var listener : eventListenerGroups.eventListenerGroup_PRE_UPDATE.listeners() ) { veto |= listener.onPreUpdate( event ); } return veto; @@ -595,8 +582,8 @@ protected boolean firePreUpsert(Object entity, Object id, Object[] state, Entity } else { boolean veto = false; - final PreUpsertEvent event = new PreUpsertEvent( entity, id, state, persister, null ); - for ( PreUpsertEventListener listener : eventListenerGroups.eventListenerGroup_PRE_UPSERT.listeners() ) { + final var event = new PreUpsertEvent( entity, id, state, persister, null ); + for ( var listener : eventListenerGroups.eventListenerGroup_PRE_UPSERT.listeners() ) { veto |= listener.onPreUpsert( event ); } return veto; @@ -610,8 +597,8 @@ protected boolean firePreDelete(Object entity, Object id, EntityPersister persis } else { boolean veto = false; - final PreDeleteEvent event = new PreDeleteEvent( entity, id, null, persister, null ); - for ( PreDeleteEventListener listener : eventListenerGroups.eventListenerGroup_PRE_DELETE.listeners() ) { + final var event = new PreDeleteEvent( entity, id, null, persister, null ); + for ( var listener : eventListenerGroups.eventListenerGroup_PRE_DELETE.listeners() ) { veto |= listener.onPreDelete( event ); } return veto; @@ -696,8 +683,7 @@ protected void forEachOwnedCollection( EntityPersister persister, BiConsumer> action) { persister.visitAttributeMappings( attribute -> { if ( attribute.isPluralAttributeMapping() ) { - final CollectionPersister descriptor = - attribute.asPluralAttributeMapping().getCollectionDescriptor(); + final var descriptor = attribute.asPluralAttributeMapping().getCollectionDescriptor(); final Object ck = lockCacheItem( key, descriptor ); if ( !descriptor.isInverse() ) { final Object value = attribute.getPropertyAccess().getGetter().get(entity); @@ -755,7 +741,7 @@ public Object get(String entityName, Object id) { public Object get(String entityName, Object id, LockMode lockMode) { checkOpen(); - final EntityPersister persister = requireEntityPersister( entityName ); + final var persister = requireEntityPersister( entityName ); if ( persister.canReadFromCache() ) { final Object cachedEntity = loadFromSecondLevelCache( persister, generateEntityKey( id, persister ), null, lockMode ); @@ -790,11 +776,10 @@ public T get(EntityGraph graph, GraphSemantic graphSemantic, Object id) { public T get( EntityGraph graph, GraphSemantic graphSemantic, Object id, LockMode lockMode) { - final RootGraphImplementor rootGraph = (RootGraphImplementor) graph; + final var rootGraph = (RootGraphImplementor) graph; checkOpen(); - final EffectiveEntityGraph effectiveEntityGraph = - getLoadQueryInfluencers().getEffectiveEntityGraph(); + final var effectiveEntityGraph = getLoadQueryInfluencers().getEffectiveEntityGraph(); effectiveEntityGraph.applyGraph( rootGraph, graphSemantic ); try { @@ -813,8 +798,8 @@ public List getMultiple(Class entityClass, List ids, LockMode lockM } } - final EntityPersister persister = requireEntityPersister( entityClass.getName() ); - final List results = persister.multiLoad( ids.toArray(), this, new MultiLoadOptions(lockMode) ); + final var persister = requireEntityPersister( entityClass.getName() ); + final var results = persister.multiLoad( ids.toArray(), this, new MultiLoadOptions(lockMode) ); //noinspection unchecked return (List) results; } @@ -831,15 +816,14 @@ public List getMultiple(EntityGraph entityGraph, GraphSemantic graphSe } } - final RootGraphImplementor rootGraph = (RootGraphImplementor) entityGraph; + final var rootGraph = (RootGraphImplementor) entityGraph; - final EffectiveEntityGraph effectiveEntityGraph = - getLoadQueryInfluencers().getEffectiveEntityGraph(); + final var effectiveEntityGraph = getLoadQueryInfluencers().getEffectiveEntityGraph(); effectiveEntityGraph.applyGraph( rootGraph, graphSemantic ); try { - final EntityPersister persister = requireEntityPersister( rootGraph.getGraphedType().getTypeName() ); - final List results = persister.multiLoad( ids.toArray(), this, MULTI_ID_LOAD_OPTIONS ); + final var persister = requireEntityPersister( rootGraph.getGraphedType().getTypeName() ); + final var results = persister.multiLoad( ids.toArray(), this, MULTI_ID_LOAD_OPTIONS ); //noinspection unchecked return (List) results; } @@ -856,8 +840,8 @@ public List getMultiple(Class entityClass, List ids) { } } - final EntityPersister persister = requireEntityPersister( entityClass.getName() ); - final List results = persister.multiLoad( ids.toArray(), this, MULTI_ID_LOAD_OPTIONS ); + final var persister = requireEntityPersister( entityClass.getName() ); + final var results = persister.multiLoad( ids.toArray(), this, MULTI_ID_LOAD_OPTIONS ); //noinspection unchecked return (List) results; @@ -918,14 +902,14 @@ public void refresh(Object entity, LockMode lockMode) { @Override public void refresh(String entityName, Object entity, LockMode lockMode) { checkOpen(); - final EntityPersister persister = getEntityPersister( entityName, entity ); + final var persister = getEntityPersister( entityName, entity ); final Object id = persister.getIdentifier( entity, this ); if ( LOG.isTraceEnabled() ) { LOG.tracev( "Refreshing transient {0}", infoString( persister, id, getFactory() ) ); } if ( persister.canWriteToCache() ) { - final EntityDataAccess cacheAccess = persister.getCacheAccessStrategy(); + final var cacheAccess = persister.getCacheAccessStrategy(); if ( cacheAccess != null ) { final Object ck = cacheAccess.generateCacheKey( id, @@ -959,13 +943,13 @@ public Object immediateLoad(String entityName, Object id) { @Override public void initializeCollection(PersistentCollection collection, boolean writing) { checkOpen(); - final PersistenceContext persistenceContext = getPersistenceContextInternal(); - final CollectionEntry ce = persistenceContext.getCollectionEntry( collection ); + final var persistenceContext = getPersistenceContextInternal(); + final var ce = persistenceContext.getCollectionEntry( collection ); if ( ce == null ) { throw new HibernateException( "no entry for collection" ); } if ( !collection.wasInitialized() ) { - final CollectionPersister loadedPersister = ce.getLoadedPersister(); + final var loadedPersister = ce.getLoadedPersister(); final Object loadedKey = ce.getLoadedKey(); if ( LOG.isTraceEnabled() ) { LOG.trace( "Initializing collection " @@ -980,7 +964,7 @@ public void initializeCollection(PersistentCollection collection, boolean wri loadedPersister.initialize( loadedKey, this ); handlePotentiallyEmptyCollection( collection, persistenceContext, loadedKey, loadedPersister ); LOG.trace( "Collection initialized" ); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.fetchCollection( loadedPersister.getRole() ); } @@ -1007,12 +991,12 @@ public Object internalLoad( boolean nullable) { checkOpen(); - final EntityPersister persister = requireEntityPersister( entityName ); - final EntityKey entityKey = generateEntityKey( id, persister ); + final var persister = requireEntityPersister( entityName ); + final var entityKey = generateEntityKey( id, persister ); // first, try to load it from the temp PC associated to this SS - final PersistenceContext persistenceContext = getPersistenceContext(); - final EntityHolder holder = persistenceContext.getEntityHolder( entityKey ); + final var persistenceContext = getPersistenceContext(); + final var holder = persistenceContext.getEntityHolder( entityKey ); if ( holder != null && holder.getEntity() != null ) { // we found it in the temp PC. Should indicate we are in the midst of processing a result set // containing eager fetches via join fetch @@ -1025,8 +1009,8 @@ public Object internalLoad( // first, check to see if we can use "bytecode proxies" - final EntityMetamodel entityMetamodel = persister.getEntityMetamodel(); - final BytecodeEnhancementMetadata enhancementMetadata = entityMetamodel.getBytecodeEnhancementMetadata(); + final var entityMetamodel = persister.getEntityMetamodel(); + final var enhancementMetadata = entityMetamodel.getBytecodeEnhancementMetadata(); if ( enhancementMetadata.isEnhancedForLazyLoading() ) { // if the entity defines a HibernateProxy factory, see if there is an // existing proxy associated with the PC - and if so, use it @@ -1059,12 +1043,9 @@ else if ( !entityMetamodel.hasSubclasses() ) { else { if ( persister.hasProxy() ) { final Object existingProxy = holder == null ? null : holder.getProxy(); - if ( existingProxy != null ) { - return persistenceContext.narrowProxy( existingProxy, persister, entityKey, null ); - } - else { - return createProxy( entityKey ); - } + return existingProxy != null + ? persistenceContext.narrowProxy( existingProxy, persister, entityKey, null ) + : createProxy( entityKey ); } } } @@ -1095,8 +1076,8 @@ private Object createProxy(EntityKey entityKey) { @Override public void fetch(Object association) { checkOpen(); - final PersistenceContext persistenceContext = getPersistenceContext(); - final LazyInitializer initializer = extractLazyInitializer( association ); + final var persistenceContext = getPersistenceContext(); + final var initializer = extractLazyInitializer( association ); if ( initializer != null ) { if ( initializer.isUninitialized() ) { final String entityName = initializer.getEntityName(); @@ -1137,7 +1118,7 @@ else if ( isPersistentAttributeInterceptable( association ) ) { } else if ( association instanceof PersistentCollection collection ) { if ( !collection.wasInitialized() ) { - final CollectionPersister collectionDescriptor = requireCollectionPersister( collection.getRole() ); + final var collectionDescriptor = requireCollectionPersister( collection.getRole() ); final Object key = collection.getKey(); persistenceContext.addUninitializedCollection( collectionDescriptor, collection, key ); collection.setCurrentSession( this ); @@ -1152,7 +1133,7 @@ else if ( association instanceof PersistentCollection collection ) { handlePotentiallyEmptyCollection( collection, getPersistenceContextInternal(), key, collectionDescriptor ); LOG.trace( "Collection fetched" ); - final StatisticsImplementor statistics = getFactory().getStatistics(); + final var statistics = getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.fetchCollection( collectionDescriptor.getRole() ); } @@ -1201,7 +1182,7 @@ private void managedFlush() { @Override public String bestGuessEntityName(Object object) { - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { object = lazyInitializer.getImplementation(); } @@ -1238,7 +1219,7 @@ public EntityPersister getEntityPersister(String entityName, Object entity) { public Object getEntityUsingInterceptor(EntityKey key) { checkOpen(); - final PersistenceContext persistenceContext = getPersistenceContext(); + final var persistenceContext = getPersistenceContext(); final Object result = persistenceContext.getEntity( key ); if ( result != null ) { return result; @@ -1376,7 +1357,7 @@ private LockMode getNullSafeLockMode(LockMode lockMode) { protected Object lockCacheItem(Object id, Object previousVersion, EntityPersister persister) { if ( persister.canWriteToCache() ) { - final EntityDataAccess cache = persister.getCacheAccessStrategy(); + final var cache = persister.getCacheAccessStrategy(); final Object ck = cache.generateCacheKey( id, persister, @@ -1400,7 +1381,7 @@ protected void removeCacheItem(Object ck, EntityPersister persister) { protected Object lockCacheItem(Object key, CollectionPersister persister) { if ( persister.hasCache() ) { - final CollectionDataAccess cache = persister.getCacheAccessStrategy(); + final var cache = persister.getCacheAccessStrategy(); final Object ck = cache.generateCacheKey( key, persister, @@ -1429,9 +1410,9 @@ public void registerProcess(AfterTransactionCompletionProcess process) { @Override public void lock(String entityName, Object child, LockOptions lockOptions) { - final EntityPersister persister = getEntityPersister( entityName, child ); + final var persister = getEntityPersister( entityName, child ); persister.lock( persister.getIdentifier( child ), persister.getVersion( child ), child, lockOptions, this ); - final EntityEntry entry = getPersistenceContextInternal().getEntry( child ); + final var entry = getPersistenceContextInternal().getEntry( child ); if ( entry == null ) { throw new AssertionFailure( "no entry in temporary persistence context" ); } diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/immutable/ImmutableTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/immutable/ImmutableTest.java index 9bf1633c3ec5..c047e1f6317d 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/immutable/ImmutableTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/immutable/ImmutableTest.java @@ -103,7 +103,7 @@ public void testImmutableCollection() { } catch ( PersistenceException ex ) { // expected - assertTrue(ex.getMessage().contains("changed an immutable collection instance")); + assertTrue(ex.getMessage().contains("Immutable collection was modified")); log.debug("success"); } s.close(); @@ -120,7 +120,7 @@ public void testImmutableCollection() { tx.commit(); fail(); } catch (PersistenceException e) { - assertTrue(e.getMessage().contains("changed an immutable collection instance")); + assertTrue(e.getMessage().contains("Immutable collection was modified")); log.debug("success"); } s.close();