diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractFlushingEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractFlushingEventListener.java index e967bc287574..c5a08e765af6 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractFlushingEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractFlushingEventListener.java @@ -15,7 +15,6 @@ import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.engine.internal.Cascade; import org.hibernate.engine.internal.CascadePoint; -import org.hibernate.engine.jdbc.spi.JdbcCoordinator; import org.hibernate.engine.spi.ActionQueue; import org.hibernate.engine.spi.CascadingActions; import org.hibernate.engine.spi.CollectionEntry; @@ -24,7 +23,6 @@ import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.Status; -import org.hibernate.event.service.spi.EventListenerGroup; import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.FlushEntityEvent; import org.hibernate.event.spi.FlushEntityEventListener; @@ -63,8 +61,8 @@ public abstract class AbstractFlushingEventListener { */ protected void flushEverythingToExecutions(FlushEvent event) throws HibernateException { LOG.trace( "Flushing session" ); - final EventSource session = event.getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var session = event.getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); preFlush( session, persistenceContext ); flushEverythingToExecutions( event, persistenceContext, session ); } @@ -98,9 +96,9 @@ protected void preFlush(EventSource session, PersistenceContext persistenceConte protected void logFlushResults(FlushEvent event) { if ( LOG.isDebugEnabled() ) { - final EventSource session = event.getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final ActionQueue actionQueue = session.getActionQueue(); + final var session = event.getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); + final var actionQueue = session.getActionQueue(); LOG.debugf( "Flushed: %s insertions, %s updates, %s deletions to %s objects", actionQueue.numberOfInsertions(), @@ -128,11 +126,11 @@ protected void logFlushResults(FlushEvent event) { private void prepareEntityFlushes(EventSource session, PersistenceContext persistenceContext) throws HibernateException { LOG.trace( "Processing flush-time cascades" ); - final PersistContext context = PersistContext.create(); + final var context = PersistContext.create(); // safe from concurrent modification because of how concurrentEntries() is implemented on IdentityMap for ( var me : persistenceContext.reentrantSafeEntityEntries() ) { // for ( Map.Entry me : IdentityMap.concurrentEntries( persistenceContext.getEntityEntries() ) ) { - final EntityEntry entry = me.getValue(); + final var entry = me.getValue(); if ( flushable( entry ) ) { cascadeOnFlush( session, entry.getPersister(), me.getKey(), context ); } @@ -146,7 +144,7 @@ void checkForTransientReferences(EventSource session, PersistenceContext persist // persistent when we do the check (I wonder if we could move this // into Nullability, instead of abusing the Cascade infrastructure) for ( var me : persistenceContext.reentrantSafeEntityEntries() ) { - final EntityEntry entry = me.getValue(); + final var entry = me.getValue(); if ( checkable( entry ) ) { Cascade.cascade( CascadingActions.CHECK_ON_FLUSH, @@ -175,7 +173,7 @@ private static boolean checkable(EntityEntry entry) { private void cascadeOnFlush(EventSource session, EntityPersister persister, Object object, PersistContext anything) throws HibernateException { - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { Cascade.cascade( CascadingActions.PERSIST_ON_FLUSH, CascadePoint.BEFORE_FLUSH, session, persister, object, anything ); @@ -194,7 +192,9 @@ private void prepareCollectionFlushes(PersistenceContext persistenceContext) thr LOG.trace( "Dirty checking collections" ); final var collectionEntries = persistenceContext.getCollectionEntries(); if ( collectionEntries != null ) { - final var identityMap = (InstanceIdentityMap, CollectionEntry>) collectionEntries; + final var identityMap = + (InstanceIdentityMap, CollectionEntry>) + collectionEntries; for ( var entry : identityMap.toArray() ) { entry.getValue().preFlush( entry.getKey() ); } @@ -212,8 +212,8 @@ private int flushEntities(final FlushEvent event, final PersistenceContext persi throws HibernateException { LOG.trace( "Flushing entities and processing referenced collections" ); - final EventSource source = event.getSession(); - final EventListenerGroup flushListeners = + final var source = event.getSession(); + final var flushListeners = event.getFactory().getEventListenerGroups().eventListenerGroup_FLUSH_ENTITY; // Among other things, updateReachables() recursively loads all @@ -227,7 +227,7 @@ private int flushEntities(final FlushEvent event, final PersistenceContext persi int eventGenerationId = 0; //Used to double-check the instance reuse won't cause problems for ( var me : entityEntries ) { // Update the status of the object and if necessary, schedule an update - final EntityEntry entry = me.getValue(); + final var entry = me.getValue(); final Status status = entry.getStatus(); if ( status != Status.LOADING && status != Status.GONE ) { entityEvent = createOrReuseEventInstance( entityEvent, source, me.getKey(), entry ); @@ -276,9 +276,11 @@ private int flushCollections(final EventSource session, final PersistenceContext } else { count = collectionEntries.size(); - final var identityMap = (InstanceIdentityMap, CollectionEntry>) collectionEntries; + final var identityMap = + (InstanceIdentityMap, CollectionEntry>) + collectionEntries; for ( var me : identityMap.toArray() ) { - final CollectionEntry ce = me.getValue(); + final var ce = me.getValue(); if ( !ce.isReached() && !ce.isIgnore() ) { processUnreachableCollection( me.getKey(), session ); } @@ -288,8 +290,8 @@ private int flushCollections(final EventSource session, final PersistenceContext // Schedule updates to collections: LOG.trace( "Scheduling collection removes/(re)creates/updates" ); - final ActionQueue actionQueue = session.getActionQueue(); - final Interceptor interceptor = session.getInterceptor(); + final var actionQueue = session.getActionQueue(); + final var interceptor = session.getInterceptor(); persistenceContext.forEachCollectionEntry( (coll, ce) -> { if ( ce.isDorecreate() ) { @@ -366,8 +368,8 @@ protected void performExecutions(EventSource session) { // during-flush callbacks more leniency in regards to initializing proxies and // lazy collections during their processing. // For more information, see HHH-2763 - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final JdbcCoordinator jdbcCoordinator = session.getJdbcCoordinator(); + final var persistenceContext = session.getPersistenceContextInternal(); + final var jdbcCoordinator = session.getJdbcCoordinator(); try { jdbcCoordinator.flushBeginning(); persistenceContext.setFlushing( true ); @@ -398,7 +400,7 @@ protected void performExecutions(EventSource session) { protected void postFlush(SessionImplementor session) throws HibernateException { LOG.trace( "Post flush" ); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); persistenceContext.clearCollectionsByKey(); // the database has changed now, so the subselect results need to be invalidated diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractSaveEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractSaveEventListener.java index 3588f82641e7..b4275c8c9220 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractSaveEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/AbstractSaveEventListener.java @@ -14,10 +14,8 @@ import org.hibernate.engine.internal.Cascade; import org.hibernate.engine.internal.CascadePoint; import org.hibernate.engine.spi.CascadingAction; -import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.EntityEntryExtraState; import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SelfDirtinessTracker; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.Status; @@ -101,8 +99,8 @@ protected Object saveWithGeneratedId( C context, EventSource source, boolean requiresImmediateIdAccess) { - final EntityPersister persister = source.getEntityPersister( entityName, entity ); - final Generator generator = persister.getGenerator(); + final var persister = source.getEntityPersister( entityName, entity ); + final var generator = persister.getGenerator(); final boolean generatedOnExecution = generator.generatedOnExecution( entity, source ); final boolean generatedBeforeExecution = generator.generatedBeforeExecution( entity, source ); final Object generatedId; @@ -216,13 +214,13 @@ protected Object performSave( LOG.trace( "Persisting " + infoString( persister, id, source.getFactory() ) ); } - final EntityKey key = useIdentityColumn ? null : entityKey( id, persister, source ); + final var key = useIdentityColumn ? null : entityKey( id, persister, source ); return performSaveOrReplicate( entity, key, persister, useIdentityColumn, context, source, delayIdentityInserts ); } private static EntityKey entityKey(Object id, EntityPersister persister, EventSource source) { - final EntityKey key = source.generateEntityKey( id, persister ); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var key = source.generateEntityKey( id, persister ); + final var persistenceContext = source.getPersistenceContextInternal(); final Object old = persistenceContext.getEntity( key ); if ( old != null ) { if ( persistenceContext.getEntry( old ).getStatus() == Status.DELETED ) { @@ -264,12 +262,12 @@ protected Object performSaveOrReplicate( final Object id = key == null ? null : key.getIdentifier(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); // Put a placeholder in entries, so we don't recurse back and try to save() the // same object again. QUESTION: should this be done before onSave() is called? // likewise, should it be done before onUpdate()? - final EntityEntry original = persistenceContext.addEntry( + final var original = persistenceContext.addEntry( entity, Status.SAVING, null, @@ -287,7 +285,7 @@ protected Object performSaveOrReplicate( cascadeBeforeSave( source, persister, entity, context ); - final AbstractEntityInsertAction insert = addInsertAction( + final var insert = addInsertAction( cloneAndSubstituteValues( entity, persister, context, source, id ), id, entity, @@ -303,9 +301,9 @@ protected Object performSaveOrReplicate( final Object finalId = handleGeneratedId( useIdentityColumn, id, insert ); - final EntityEntry newEntry = persistenceContext.getEntry( entity ); + final var newEntry = persistenceContext.getEntry( entity ); if ( newEntry != original ) { - final EntityEntryExtraState extraState = newEntry.getExtraState( EntityEntryExtraState.class ); + final var extraState = newEntry.getExtraState( EntityEntryExtraState.class ); if ( extraState == null ) { newEntry.addExtraState( original.getExtraState( EntityEntryExtraState.class ) ); } @@ -365,7 +363,7 @@ private AbstractEntityInsertAction addInsertAction( EventSource source, boolean delayIdentityInserts) { if ( useIdentityColumn ) { - final EntityIdentityInsertAction insert = new EntityIdentityInsertAction( + final var insert = new EntityIdentityInsertAction( values, entity, persister, @@ -377,7 +375,7 @@ private AbstractEntityInsertAction addInsertAction( return insert; } else { - final EntityInsertAction insert = new EntityInsertAction( + final var insert = new EntityInsertAction( id, values, entity, @@ -412,7 +410,7 @@ protected boolean visitCollectionsBeforeSave( Object[] values, Type[] types, EventSource source) { - final WrapVisitor visitor = new WrapVisitor( entity, id, source ); + final var visitor = new WrapVisitor( entity, id, source ); // substitutes into values by side effect visitor.processEntityPropertyValues( values, types ); return visitor.isSubstitutionRequired(); @@ -466,7 +464,7 @@ protected void cascadeBeforeSave( Object entity, C context) { // cascade-save to many-to-one BEFORE the parent is saved - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { Cascade.cascade( @@ -497,7 +495,7 @@ protected void cascadeAfterSave( Object entity, C context) { // cascade-save to collections AFTER the collection owner was saved - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { Cascade.cascade( diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultAutoFlushEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultAutoFlushEventListener.java index e83de115d1ce..97557c6e5ea6 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultAutoFlushEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultAutoFlushEventListener.java @@ -6,16 +6,10 @@ import org.hibernate.FlushMode; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.ActionQueue; -import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.SessionEventListenerManager; import org.hibernate.event.spi.AutoFlushEvent; import org.hibernate.event.spi.AutoFlushEventListener; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; import org.hibernate.event.spi.EventSource; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.stat.spi.StatisticsImplementor; import org.jboss.logging.Logger; @@ -38,19 +32,19 @@ public class DefaultAutoFlushEventListener extends AbstractFlushingEventListener */ @Override public void onAutoFlush(AutoFlushEvent event) throws HibernateException { - final EventSource source = event.getSession(); - final SessionEventListenerManager eventListenerManager = source.getEventListenerManager(); - final EventMonitor eventMonitor = source.getEventMonitor(); - final DiagnosticEvent partialFlushEvent = eventMonitor.beginPartialFlushEvent(); + final var source = event.getSession(); + final var eventListenerManager = source.getEventListenerManager(); + final var eventMonitor = source.getEventMonitor(); + final var partialFlushEvent = eventMonitor.beginPartialFlushEvent(); try { eventListenerManager.partialFlushStart(); if ( flushMightBeNeeded( source ) ) { // Need to get the number of collection removals before flushing to executions // (because flushing to executions can add collection removal actions to the action queue). - final ActionQueue actionQueue = source.getActionQueue(); - final EventSource session = event.getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var actionQueue = source.getActionQueue(); + final var session = event.getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); if ( !event.isSkipPreFlush() ) { preFlush( session, persistenceContext ); } @@ -62,17 +56,16 @@ public void onAutoFlush(AutoFlushEvent event) throws HibernateException { // note: performExecutions() clears all collectionXxxxtion // collections (the collection actions) in the session - final DiagnosticEvent flushEvent = eventMonitor.beginFlushEvent(); + final var flushEvent = eventMonitor.beginFlushEvent(); try { performExecutions( source ); postFlush( source ); - postPostFlush( source ); } finally { eventMonitor.completeFlushEvent( flushEvent, event, true ); } - final StatisticsImplementor statistics = source.getFactory().getStatistics(); + final var statistics = source.getFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.flush(); } @@ -95,10 +88,10 @@ public void onAutoFlush(AutoFlushEvent event) throws HibernateException { @Override public void onAutoPreFlush(EventSource source) throws HibernateException { - final SessionEventListenerManager eventListenerManager = source.getEventListenerManager(); + final var eventListenerManager = source.getEventListenerManager(); eventListenerManager.prePartialFlushStart(); - final EventMonitor eventMonitor = source.getEventMonitor(); - DiagnosticEvent diagnosticEvent = eventMonitor.beginPrePartialFlush(); + final var eventMonitor = source.getEventMonitor(); + final var diagnosticEvent = eventMonitor.beginPrePartialFlush(); try { if ( flushMightBeNeeded( source ) ) { preFlush( source, source.getPersistenceContextInternal() ); @@ -116,7 +109,7 @@ private boolean flushIsReallyNeeded(AutoFlushEvent event, final EventSource sour } private boolean flushMightBeNeeded(final EventSource source) { - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); return !source.getHibernateFlushMode().lessThan( FlushMode.AUTO ) && ( persistenceContext.getNumberOfManagedEntities() > 0 || persistenceContext.getCollectionEntriesSize() > 0 ); diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDeleteEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDeleteEventListener.java index 93805e3d7a8d..a1b02adf9493 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDeleteEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDeleteEventListener.java @@ -20,11 +20,9 @@ import org.hibernate.engine.internal.Nullability.NullabilityCheckType; import org.hibernate.engine.spi.CascadingActions; 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.Status; -import org.hibernate.event.service.spi.EventListenerGroups; import org.hibernate.event.spi.DeleteContext; import org.hibernate.event.spi.DeleteEvent; import org.hibernate.event.spi.DeleteEventListener; @@ -35,10 +33,8 @@ import org.hibernate.jpa.event.spi.CallbackRegistry; import org.hibernate.jpa.event.spi.CallbackRegistryConsumer; import org.hibernate.jpa.event.spi.CallbackType; -import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.property.access.internal.PropertyAccessStrategyBackRefImpl; -import org.hibernate.proxy.LazyInitializer; import org.hibernate.type.CollectionType; import org.hibernate.type.ComponentType; import org.hibernate.type.Type; @@ -91,16 +87,17 @@ public void onDelete(DeleteEvent event, DeleteContext transientEntities) throws private boolean optimizeUnloadedDelete(DeleteEvent event) { final Object object = event.getObject(); - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); + final var lazyInitializer = extractLazyInitializer( object ); if ( lazyInitializer != null ) { if ( lazyInitializer.isUninitialized() ) { - final EventSource source = event.getSession(); - final EntityPersister persister = event.getFactory().getMappingMetamodel() - .findEntityDescriptor( lazyInitializer.getEntityName() ); + final var source = event.getSession(); + final var persister = + event.getFactory().getMappingMetamodel() + .findEntityDescriptor( lazyInitializer.getEntityName() ); final Object id = lazyInitializer.getInternalIdentifier(); - final EntityKey key = source.generateEntityKey( id, persister ); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - final EntityHolder entityHolder = persistenceContext.getEntityHolder( key ); + final var key = source.generateEntityKey( id, persister ); + final var persistenceContext = source.getPersistenceContextInternal(); + final var entityHolder = persistenceContext.getEntityHolder( key ); if ( (entityHolder == null || entityHolder.getEntity() == null || !entityHolder.isInitialized()) && canBeDeletedWithoutLoading( source, persister ) ) { if ( event.getFactory().getSessionFactoryOptions().isJpaBootstrap() && entityHolder == null ) { @@ -129,7 +126,7 @@ && canBeDeletedWithoutLoading( source, persister ) ) { private static void deleteOwnedCollections(Type type, Object key, EventSource session) { if ( type instanceof CollectionType collectionType ) { - final CollectionPersister persister = + final var persister = session.getFactory().getMappingMetamodel() .getCollectionDescriptor( collectionType.getRole() ); if ( !persister.isInverse() && !skipRemoval( session, persister, key ) ) { @@ -144,9 +141,9 @@ else if ( type instanceof ComponentType componentType ) { } private void delete(DeleteEvent event, DeleteContext transientEntities) { - final PersistenceContext persistenceContext = event.getSession().getPersistenceContextInternal(); + final var persistenceContext = event.getSession().getPersistenceContextInternal(); final Object entity = persistenceContext.unproxyAndReassociate( event.getObject() ); - final EntityEntry entityEntry = persistenceContext.getEntry( entity ); + final var entityEntry = persistenceContext.getEntry( entity ); if ( entityEntry == null ) { deleteUnmanagedInstance( event, transientEntities, entity ); } @@ -157,8 +154,8 @@ private void delete(DeleteEvent event, DeleteContext transientEntities) { private void deleteUnmanagedInstance(DeleteEvent event, DeleteContext transientEntities, Object entity) { LOG.trace( "Deleted entity was not associated with current session" ); - final EventSource source = event.getSession(); - final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); + final var source = event.getSession(); + final var persister = source.getEntityPersister( event.getEntityName(), entity ); if ( ForeignKeys.isTransient( persister.getEntityName(), entity, null, source ) ) { deleteTransientEntity( source, entity, persister, transientEntities ); } @@ -178,7 +175,7 @@ private void deleteDetachedEntity( + persister.getEntityName() + "' because it has a null identifier" ); } - final EntityKey key = source.generateEntityKey( id, persister); + final var key = source.generateEntityKey( id, persister); final Object version = persister.getVersion( entity ); // persistenceContext.checkUniqueness( key, entity ); @@ -186,8 +183,8 @@ private void deleteDetachedEntity( new OnUpdateVisitor( source, id, entity ).process( entity, persister ); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - final EntityEntry entityEntry = persistenceContext.addEntity( + final var persistenceContext = source.getPersistenceContextInternal(); + final var entityEntry = persistenceContext.addEntity( entity, persister.isMutable() ? Status.MANAGED : Status.READ_ONLY, persister.getValues( entity ), @@ -213,7 +210,7 @@ private void deleteDetachedEntity( */ private static boolean flushAndEvictExistingEntity( EntityKey key, Object version, EntityPersister persister, EventSource source) { - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); final Object existingEntity = persistenceContext.getEntity( key ); if ( existingEntity != null ) { if ( persistenceContext.getEntry( existingEntity ).getStatus().isDeletedOrGone() ) { @@ -246,7 +243,7 @@ private void deletePersistentInstance( Object entity, EntityEntry entityEntry) { LOG.trace( "Deleting a persistent instance" ); - final EventSource source = event.getSession(); + final var source = event.getSession(); if ( entityEntry.getStatus().isDeletedOrGone() || source.getPersistenceContextInternal() .containsDeletedUnloadedEntityKey( entityEntry.getEntityKey() ) ) { @@ -304,7 +301,7 @@ private boolean canBeDeletedWithoutLoading(EventSource source, EntityPersister p } private static boolean hasCustomEventListeners(EventSource source) { - final EventListenerGroups eventListenerGroups = source.getFactory().getEventListenerGroups(); + final var eventListenerGroups = source.getFactory().getEventListenerGroups(); // Bean Validation adds a PRE_DELETE listener // and Envers adds a POST_DELETE listener return eventListenerGroups.eventListenerGroup_PRE_DELETE.count() > 0 @@ -375,12 +372,13 @@ protected final void deleteEntity( LOG.trace( "Deleting " + infoString( persister, entityEntry.getId(), session.getFactory() ) ); } - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); final Object version = entityEntry.getVersion(); - final Object[] currentState = entityEntry.getLoadedState() == null - ? persister.getValues(entity) //i.e. the entity came in from update() - : entityEntry.getLoadedState(); + final Object[] currentState = + entityEntry.getLoadedState() == null + ? persister.getValues( entity ) //i.e. the entity came in from update() + : entityEntry.getLoadedState(); final Object[] deletedState = createDeletedState( persister, entity, currentState, session ); entityEntry.setDeletedState( deletedState ); @@ -395,7 +393,7 @@ protected final void deleteEntity( // before any callbacks, etc., so subdeletions see that this deletion happened first persistenceContext.setEntryStatus( entityEntry, Status.DELETED ); - final EntityKey key = session.generateEntityKey( entityEntry.getId(), persister ); + final var key = session.generateEntityKey( entityEntry.getId(), persister ); cascadeBeforeDelete( session, persister, entity, transientEntities ); @@ -405,11 +403,12 @@ protected final void deleteEntity( .checkNullability( entityEntry.getDeletedState(), persister ); persistenceContext.registerNullifiableEntityKey( key ); + final var actionQueue = session.getActionQueue(); if ( isOrphanRemovalBeforeUpdates ) { // TODO: The removeOrphan concept is a temporary "hack" for HHH-6484. // This should be removed once action/task // ordering is improved. - session.getActionQueue().addAction( + actionQueue.addAction( new OrphanRemovalAction( entityEntry.getId(), deletedState, @@ -423,7 +422,7 @@ protected final void deleteEntity( } else { // Ensures that containing deletions happen before sub-deletions - session.getActionQueue().addAction( + actionQueue.addAction( new EntityDeleteAction( entityEntry.getId(), deletedState, @@ -464,7 +463,7 @@ private Object[] createDeletedState( for ( int i = 0; i < types.length; i++) { if ( types[i] instanceof CollectionType collectionType && !enhancementMetadata.isAttributeLoaded( parent, propertyNames[i] ) ) { - final CollectionPersister collectionDescriptor = + final var collectionDescriptor = metamodel.getCollectionDescriptor( collectionType.getRole() ); if ( collectionDescriptor.needsRemove() || collectionDescriptor.hasCache() ) { final Object keyOfOwner = collectionType.getKeyOfOwner( parent, eventSource.getSession() ); @@ -492,9 +491,9 @@ protected void cascadeBeforeDelete( Object entity, DeleteContext transientEntities) throws HibernateException { - final CacheMode cacheMode = session.getCacheMode(); + final var cacheMode = session.getCacheMode(); session.setCacheMode( CacheMode.GET ); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { // cascade-delete to collections BEFORE the collection owner is deleted @@ -519,9 +518,9 @@ protected void cascadeAfterDelete( Object entity, DeleteContext transientEntities) throws HibernateException { - final CacheMode cacheMode = session.getCacheMode(); + final var cacheMode = session.getCacheMode(); session.setCacheMode( CacheMode.GET ); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { // cascade-delete to many-to-one AFTER the parent was deleted diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDirtyCheckEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDirtyCheckEventListener.java index eddb40ab850a..a227e5761815 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDirtyCheckEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDirtyCheckEventListener.java @@ -9,7 +9,6 @@ import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.EntityHolder; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.Status; import org.hibernate.event.spi.DirtyCheckEvent; import org.hibernate.event.spi.DirtyCheckEventListener; @@ -38,8 +37,8 @@ public class DefaultDirtyCheckEventListener implements DirtyCheckEventListener { @Override public void onDirtyCheck(DirtyCheckEvent event) throws HibernateException { - final EventSource session = event.getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContext(); + final var session = event.getSession(); + final var persistenceContext = session.getPersistenceContext(); final var holdersByKey = persistenceContext.getEntityHoldersByKey(); if ( holdersByKey != null ) { for ( var entry : holdersByKey.entrySet() ) { @@ -61,7 +60,7 @@ public void onDirtyCheck(DirtyCheckEvent event) throws HibernateException { } private static boolean isEntityDirty(EntityHolder holder, EventSource session) { - final EntityEntry entityEntry = holder.getEntityEntry(); + final var entityEntry = holder.getEntityEntry(); final Status status = entityEntry.getStatus(); return switch ( status ) { case GONE, READ_ONLY -> false; diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultEvictEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultEvictEventListener.java index 1473362b4a86..4f4ef9f2356d 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultEvictEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultEvictEventListener.java @@ -8,10 +8,7 @@ import org.hibernate.engine.internal.Cascade; import org.hibernate.engine.internal.CascadePoint; import org.hibernate.engine.spi.CascadingActions; -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.event.spi.EventSource; import org.hibernate.event.spi.EvictEvent; import org.hibernate.event.spi.EvictEventListener; @@ -42,8 +39,8 @@ public class DefaultEvictEventListener implements EvictEventListener { */ @Override public void onEvict(EvictEvent event) throws HibernateException { - final EventSource source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); final Object object = event.getObject(); if ( object == null ) { throw new NullPointerException( "null passed to Session.evict()" ); @@ -54,23 +51,23 @@ public void onEvict(EvictEvent event) throws HibernateException { if ( id == null ) { throw new IllegalArgumentException( "Could not determine identifier of proxy passed to evict()" ); } - final EntityPersister persister = + final var persister = source.getFactory().getMappingMetamodel() .getEntityDescriptor( lazyInitializer.getEntityName() ); - final EntityKey key = source.generateEntityKey( id, persister ); - final EntityHolder holder = persistenceContext.detachEntity( key ); + final var key = source.generateEntityKey( id, persister ); + final var holder = persistenceContext.detachEntity( key ); // if the entity has been evicted then its holder is null if ( holder != null && !lazyInitializer.isUninitialized() ) { final Object entity = holder.getEntity(); if ( entity != null ) { - final EntityEntry entry = persistenceContext.removeEntry( entity ); + final var entry = persistenceContext.removeEntry( entity ); doEvict( entity, key, entry.getPersister(), event.getSession() ); } } lazyInitializer.unsetSession(); } else { - final EntityEntry entry = persistenceContext.getEntry( object ); + final var entry = persistenceContext.getEntry( object ); if ( entry != null ) { doEvict( object, entry.getEntityKey(), entry.getPersister(), source ); } @@ -89,7 +86,7 @@ private static void checkEntity(Object object, EventSource source) { final String entityName = source.getSession().guessEntityName( object ); if ( entityName != null ) { try { - final EntityPersister persister = + final var persister = source.getFactory().getMappingMetamodel() .getEntityDescriptor( entityName ); if ( persister != null ) { @@ -112,7 +109,7 @@ protected void doEvict( LOG.trace( "Evicting " + infoString( persister ) ); } - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); if ( persister.hasNaturalIdentifier() ) { persistenceContext.getNaturalIdResolutions().handleEviction( key.getIdentifier(), object, persister ); } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEntityEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEntityEventListener.java index 1a2005300a17..b14c2c2a31d3 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEntityEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEntityEventListener.java @@ -18,24 +18,17 @@ import org.hibernate.engine.internal.Versioning; import org.hibernate.engine.spi.EntityEntry; 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.Status; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; -import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.FlushEntityEvent; import org.hibernate.event.spi.FlushEntityEventListener; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.jpa.event.spi.CallbackRegistry; import org.hibernate.jpa.event.spi.CallbackRegistryConsumer; -import org.hibernate.metamodel.mapping.NaturalIdMapping; import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.stat.spi.StatisticsImplementor; import org.hibernate.type.Type; import static org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer.UNFETCHED_PROPERTY; @@ -100,7 +93,7 @@ private void checkNaturalId( Object[] loaded, SessionImplementor session) { if ( !isUninitializedEnhanced( entity ) ) { - final NaturalIdMapping naturalIdMapping = persister.getNaturalIdMapping(); + final var naturalIdMapping = persister.getNaturalIdMapping(); if ( naturalIdMapping != null && entry.getStatus() != Status.READ_ONLY ) { naturalIdMapping.verifyFlushState( entry.getId(), current, loaded, session ); } @@ -109,7 +102,7 @@ private void checkNaturalId( private static boolean isUninitializedEnhanced(Object entity) { if ( isPersistentAttributeInterceptable( entity ) ) { - final PersistentAttributeInterceptor interceptor = + final var interceptor = asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor(); // the entity is an un-initialized enhancement-as-proxy reference return interceptor instanceof EnhancementAsProxyLazinessInterceptor; @@ -126,8 +119,8 @@ private static boolean isUninitializedEnhanced(Object entity) { @Override public void onFlushEntity(FlushEntityEvent event) throws HibernateException { final Object entity = event.getEntity(); - final EntityEntry entry = event.getEntityEntry(); - final EventSource session = event.getSession(); + final var entry = event.getEntityEntry(); + final var session = event.getSession(); final boolean mightBeDirty = entry.requiresDirtyCheck( entity ); @@ -144,7 +137,7 @@ public void onFlushEntity(FlushEntityEvent event) throws HibernateException { } if ( entry.getStatus() != Status.DELETED ) { - final EntityPersister persister = entry.getPersister(); + final var persister = entry.getPersister(); // now update the object // has to be outside the main if block above (because of collections) if ( substitute ) { @@ -171,7 +164,7 @@ private Object[] getValues(Object entity, EntityEntry entry, boolean mightBeDirt return loadedState; } else { - final EntityPersister persister = entry.getPersister(); + final var persister = entry.getPersister(); checkId( entity, persister, entry, session ); // grab its current state final Object[] values = persister.getValues( entity ); @@ -188,14 +181,14 @@ private Object[] getValues(Object entity, EntityEntry entry, boolean mightBeDirt private boolean wrapCollections( FlushEntityEvent event, Object[] values) { - final EntityEntry entry = event.getEntityEntry(); - final EntityPersister persister = entry.getPersister(); + final var entry = event.getEntityEntry(); + final var persister = entry.getPersister(); if ( persister.hasCollections() ) { // NOTE: we need to do the wrap here even if it's not "dirty", // because collections need wrapping but changes to _them_ // don't dirty the container. Also, for versioned data, we // need to wrap before calling searchForDirtyCollections - final WrapVisitor visitor = new WrapVisitor( event.getEntity(), entry.getId(), event.getSession() ); + final var visitor = new WrapVisitor( event.getEntity(), entry.getId(), event.getSession() ); // substitutes into values by side effect visitor.processEntityPropertyValues( values, persister.getPropertyTypes() ); return visitor.isSubstitutionRequired(); @@ -206,7 +199,7 @@ private boolean wrapCollections( } private boolean isUpdateNecessary(final FlushEntityEvent event, final boolean mightBeDirty) { - final EntityEntry entry = event.getEntityEntry(); + final var entry = event.getEntityEntry(); if ( mightBeDirty || entry.getStatus() == Status.DELETED ) { // compare to cached state (ignoring collections unless versioned) dirtyCheck( event ); @@ -232,11 +225,11 @@ private static void useTracker(final ManagedEntity entity) { } private boolean scheduleUpdate(final FlushEntityEvent event) { - final EntityEntry entry = event.getEntityEntry(); - final EventSource session = event.getSession(); + final var entry = event.getEntityEntry(); + final var session = event.getSession(); final Object entity = event.getEntity(); final Status status = entry.getStatus(); - final EntityPersister persister = entry.getPersister(); + final var persister = entry.getPersister(); final Object[] values = event.getPropertyValues(); logScheduleUpdate( entry, event.getFactory(), status, persister ); @@ -323,11 +316,11 @@ protected boolean handleInterception(FlushEntityEvent event) { } protected boolean invokeInterceptor(FlushEntityEvent event) { - final EntityEntry entry = event.getEntityEntry(); + final var entry = event.getEntityEntry(); final Object entity = event.getEntity(); final Object id = entry.getId(); final Object[] values = event.getPropertyValues(); - final EntityPersister persister = entry.getPersister(); + final var persister = entry.getPersister(); final boolean isDirty = entry.getStatus() != Status.DELETED && callbackRegistry.preUpdate( entity ) @@ -370,8 +363,8 @@ private static boolean isDirty(Type types, Object state, Object newState) { * Convenience method to retrieve an entities next version value */ private Object getNextVersion(FlushEntityEvent event) throws HibernateException { - final EntityEntry entry = event.getEntityEntry(); - final EntityPersister persister = entry.getPersister(); + final var entry = event.getEntityEntry(); + final var persister = entry.getPersister(); if ( persister.isVersioned() ) { final Object[] values = event.getPropertyValues(); if ( entry.isBeingReplicated() ) { @@ -418,8 +411,8 @@ protected final boolean isUpdateNecessary(FlushEntityEvent event) throws Hiberna } private boolean hasDirtyCollections(FlushEntityEvent event) { - final EntityEntry entityEntry = event.getEntityEntry(); - final EntityPersister persister = entityEntry.getPersister(); + final var entityEntry = event.getEntityEntry(); + final var persister = entityEntry.getPersister(); if ( isCollectionDirtyCheckNecessary( persister, entityEntry.getStatus() ) ) { final boolean hasDirtyCollections = hasDirtyCollections( event, persister ); event.setHasDirtyCollection( hasDirtyCollections ); @@ -431,7 +424,7 @@ private boolean hasDirtyCollections(FlushEntityEvent event) { } private static boolean hasDirtyCollections(FlushEntityEvent event, EntityPersister persister) { - final DirtyCollectionSearchVisitor visitor = + final var visitor = new DirtyCollectionSearchVisitor( event.getEntity(), event.getSession(), persister.getPropertyVersionability() ); visitor.processEntityPropertyValues( event.getPropertyValues(), persister.getPropertyTypes() ); @@ -465,13 +458,13 @@ protected void dirtyCheck(final FlushEntityEvent event) throws HibernateExceptio } private static int[] performDirtyCheck(FlushEntityEvent event) { - final SessionImplementor session = event.getSession(); + final var session = event.getSession(); final boolean dirtyCheckPossible; int[] dirtyProperties = null; - final EventMonitor eventMonitor = session.getEventMonitor(); - final DiagnosticEvent dirtyCalculationEvent = eventMonitor.beginDirtyCalculationEvent(); - final EntityEntry entry = event.getEntityEntry(); - final EntityPersister persister = entry.getPersister(); + final var eventMonitor = session.getEventMonitor(); + final var dirtyCalculationEvent = eventMonitor.beginDirtyCalculationEvent(); + final var entry = event.getEntityEntry(); + final var persister = entry.getPersister(); try { session.getEventListenerManager().dirtyCalculationStart(); // object loaded by update() @@ -542,8 +535,8 @@ private static int[] getDirtyProperties(FlushEntityEvent event) { } private static int[] getDirtyPropertiesFromInterceptor(FlushEntityEvent event) { - final EntityEntry entry = event.getEntityEntry(); - final EntityPersister persister = entry.getPersister(); + final var entry = event.getEntityEntry(); + final var persister = entry.getPersister(); return event.getSession().getInterceptor().findDirty( event.getEntity(), entry.getId(), @@ -566,15 +559,15 @@ public void doDirtyChecking(CustomEntityDirtinessStrategy.AttributeChecker attri } } } - final DirtyCheckContextImpl context = new DirtyCheckContextImpl(); + final var context = new DirtyCheckContextImpl(); event.getFactory().getCustomEntityDirtinessStrategy() .findDirty( event.getEntity(), event.getEntityEntry().getPersister(), event.getSession(), context ); return context.found; } private static int[] getDirtyPropertiesFromSelfDirtinessTracker(SelfDirtinessTracker tracker, FlushEntityEvent event) { - final EntityEntry entry = event.getEntityEntry(); - final EntityPersister persister = entry.getPersister(); + final var entry = event.getEntityEntry(); + final var persister = entry.getPersister(); return tracker.$$_hibernate_hasDirtyAttributes() || persister.hasMutableProperties() ? resolveDirtyAttributeIndex( tracker, event, persister, entry ) : EMPTY_INT_ARRAY; @@ -655,7 +648,7 @@ public int[] visitAttributes(CustomEntityDirtinessStrategy.AttributeChecker attr private void logDirtyProperties(EntityEntry entry, int[] dirtyProperties) { if ( dirtyProperties != null && dirtyProperties.length > 0 && LOG.isTraceEnabled() ) { - final EntityPersister persister = entry.getPersister(); + final var persister = entry.getPersister(); final String[] allPropertyNames = persister.getPropertyNames(); final String[] dirtyPropertyNames = new String[dirtyProperties.length]; for ( int i = 0; i < dirtyProperties.length; i++ ) { @@ -667,12 +660,12 @@ private void logDirtyProperties(EntityEntry entry, int[] dirtyProperties) { } private static Object[] getDatabaseSnapshot(EntityPersister persister, Object id, SessionImplementor session) { - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); if ( persister.isSelectBeforeUpdateRequired() ) { final Object[] snapshot = persistenceContext.getDatabaseSnapshot( id, persister ); if ( snapshot == null ) { - //do we even really need this? the update will fail anyway.... - final StatisticsImplementor statistics = session.getFactory().getStatistics(); + //do we even really need this? the update will fail anyway + final var statistics = session.getFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.optimisticFailure( persister.getEntityName() ); } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEventListener.java index 7efc29bdaf50..fd0ec75353cd 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultFlushEventListener.java @@ -5,13 +5,8 @@ package org.hibernate.event.internal; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; -import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.FlushEvent; import org.hibernate.event.spi.FlushEventListener; -import org.hibernate.stat.spi.StatisticsImplementor; /** * Defines the default flush event listeners used by hibernate for @@ -26,12 +21,12 @@ public class DefaultFlushEventListener extends AbstractFlushingEventListener imp * @param event The flush event to be handled. */ public void onFlush(FlushEvent event) throws HibernateException { - final EventSource source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - final EventMonitor eventMonitor = source.getEventMonitor(); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); + final var eventMonitor = source.getEventMonitor(); if ( persistenceContext.getNumberOfManagedEntities() > 0 || persistenceContext.getCollectionEntriesSize() > 0 ) { - final DiagnosticEvent flushEvent = eventMonitor.beginFlushEvent(); + final var flushEvent = eventMonitor.beginFlushEvent(); try { source.getEventListenerManager().flushStart(); @@ -49,7 +44,7 @@ public void onFlush(FlushEvent event) throws HibernateException { postPostFlush( source ); - final StatisticsImplementor statistics = source.getFactory().getStatistics(); + final var statistics = source.getFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.flush(); } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultInitializeCollectionEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultInitializeCollectionEventListener.java index f1d2ef160b67..48d9f430c218 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultInitializeCollectionEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultInitializeCollectionEventListener.java @@ -6,7 +6,6 @@ import org.hibernate.HibernateException; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.spi.InitializeCollectionEvent; @@ -15,7 +14,6 @@ import org.hibernate.internal.CoreMessageLogger; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.sql.results.internal.ResultsHelper; -import org.hibernate.stat.spi.StatisticsImplementor; import static org.hibernate.collection.spi.AbstractPersistentCollection.checkPersister; import static org.hibernate.loader.internal.CacheLoadHelper.initializeCollectionFromCache; @@ -32,16 +30,16 @@ public class DefaultInitializeCollectionEventListener implements InitializeColle */ @Override public void onInitializeCollection(InitializeCollectionEvent event) throws HibernateException { - final PersistentCollection collection = event.getCollection(); - final SessionImplementor source = event.getSession(); + final var collection = event.getCollection(); + final var source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - final CollectionEntry ce = persistenceContext.getCollectionEntry( collection ); + final var persistenceContext = source.getPersistenceContextInternal(); + final var ce = persistenceContext.getCollectionEntry( collection ); if ( ce == null ) { throw new HibernateException( "Collection was evicted" ); } if ( !collection.wasInitialized() ) { - final CollectionPersister loadedPersister = ce.getLoadedPersister(); + final var loadedPersister = ce.getLoadedPersister(); checkPersister(collection, loadedPersister); final Object loadedKey = ce.getLoadedKey(); if ( LOG.isTraceEnabled() ) { @@ -59,7 +57,7 @@ public void onInitializeCollection(InitializeCollectionEvent event) throws Hiber handlePotentiallyEmptyCollection( collection, persistenceContext, loadedKey, loadedPersister ); LOG.trace( "Collection initialized" ); - final StatisticsImplementor statistics = source.getFactory().getStatistics(); + final var statistics = source.getFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.fetchCollection( loadedPersister.getRole() ); } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java index 7ea719561f29..2c8e9acaeeb8 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java @@ -11,30 +11,20 @@ import org.hibernate.TypeMismatchException; import org.hibernate.action.internal.DelayedPostInsertIdentifier; import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor; -import org.hibernate.cache.spi.access.EntityDataAccess; import org.hibernate.cache.spi.access.SoftLock; import org.hibernate.engine.spi.EntityHolder; import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.PersistentAttributeInterceptable; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; -import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.LoadEvent; import org.hibernate.event.spi.LoadEventListener; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.loader.internal.CacheLoadHelper.PersistenceContextEntry; -import org.hibernate.metamodel.mapping.AttributeMapping; import org.hibernate.metamodel.mapping.CompositeIdentifierMapping; -import org.hibernate.metamodel.mapping.EmbeddableMappingType; -import org.hibernate.metamodel.mapping.EntityIdentifierMapping; import org.hibernate.metamodel.mapping.EntityMappingType; -import org.hibernate.metamodel.mapping.MappingType; import org.hibernate.metamodel.mapping.NonAggregatedIdentifierMapping; import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.proxy.LazyInitializer; -import org.hibernate.stat.spi.StatisticsImplementor; import static org.hibernate.engine.internal.ManagedTypeHelper.asPersistentAttributeInterceptable; import static org.hibernate.engine.internal.ManagedTypeHelper.isPersistentAttributeInterceptable; @@ -60,7 +50,7 @@ public class DefaultLoadEventListener implements LoadEventListener { */ @Override public void onLoad(LoadEvent event, LoadType loadType) throws HibernateException { - final EntityPersister persister = getPersister( event ); + final var persister = getPersister( event ); if ( persister == null ) { throw new HibernateException( "Unable to locate persister: " + event.getEntityClassName() ); } @@ -97,7 +87,7 @@ protected EntityPersister getPersister(final LoadEvent event) { private void doOnLoad(EntityPersister persister, LoadEvent event, LoadType loadType) { try { - final EntityKey keyToLoad = event.getSession().generateEntityKey( event.getEntityId(), persister ); + final var keyToLoad = event.getSession().generateEntityKey( event.getEntityId(), persister ); if ( loadType.isNakedEntityReturned() ) { //do not return a proxy! //(this option indicates we are initializing a proxy) @@ -105,9 +95,10 @@ private void doOnLoad(EntityPersister persister, LoadEvent event, LoadType loadT } else { //return a proxy if appropriate - final Object result = event.getLockMode() == LockMode.NONE - ? proxyOrLoad( event, persister, keyToLoad, loadType ) - : lockAndLoad( event, persister, keyToLoad, loadType ); + final Object result = + event.getLockMode() == LockMode.NONE + ? proxyOrLoad( event, persister, keyToLoad, loadType ) + : lockAndLoad( event, persister, keyToLoad, loadType ); event.setResult( result ); } } @@ -121,14 +112,14 @@ private void doOnLoad(EntityPersister persister, LoadEvent event, LoadType loadT private boolean handleIdType(EntityPersister persister, LoadEvent event, LoadType loadType, Class idClass) { // we may have the jpa requirement of allowing find-by-id where id is the "simple pk value" of a // dependent objects parent. This is part of its generally goofy derived identity "feature" - final EntityIdentifierMapping idMapping = persister.getIdentifierMapping(); + final var idMapping = persister.getIdentifierMapping(); if ( idMapping instanceof CompositeIdentifierMapping compositeIdMapping ) { - final EmbeddableMappingType partMappingType = compositeIdMapping.getPartMappingType(); + final var partMappingType = compositeIdMapping.getPartMappingType(); if ( partMappingType.getNumberOfAttributeMappings() == 1 ) { - final AttributeMapping singleIdAttribute = partMappingType.getAttributeMapping( 0 ); + final var singleIdAttribute = partMappingType.getAttributeMapping( 0 ); if ( singleIdAttribute.getMappedType() instanceof EntityMappingType parentIdTargetMapping ) { - final EntityIdentifierMapping parentIdTargetIdMapping = parentIdTargetMapping.getIdentifierMapping(); - final MappingType parentIdType = + final var parentIdTargetIdMapping = parentIdTargetMapping.getIdentifierMapping(); + final var parentIdType = parentIdTargetIdMapping instanceof CompositeIdentifierMapping compositeMapping ? compositeMapping.getMappedIdEmbeddableTypeDescriptor() : parentIdTargetIdMapping.getMappedType(); @@ -169,12 +160,12 @@ private void loadByDerivedIdentitySimplePkValue( EntityPersister dependentPersister, CompositeIdentifierMapping dependentIdType, EntityPersister parentPersister) { - final EventSource session = event.getSession(); - final EntityKey parentEntityKey = session.generateEntityKey( event.getEntityId(), parentPersister ); + final var session = event.getSession(); + final var parentEntityKey = session.generateEntityKey( event.getEntityId(), parentPersister ); final Object parent = doLoad( event, parentPersister, parentEntityKey, options ); final Object dependent = dependentIdType.instantiate(); dependentIdType.getPartMappingType().setValues( dependent, new Object[] { parent } ); - final EntityKey dependentEntityKey = session.generateEntityKey( dependent, dependentPersister ); + final var dependentEntityKey = session.generateEntityKey( dependent, dependentPersister ); event.setEntityId( dependent ); event.setResult( doLoad( event, dependentPersister, dependentEntityKey, options ) ); } @@ -191,7 +182,7 @@ private void loadByDerivedIdentitySimplePkValue( */ private Object load(LoadEvent event, EntityPersister persister, EntityKey keyToLoad, LoadType options) { if ( event.getInstanceToLoad() != null ) { - final EventSource session = event.getSession(); + final var session = event.getSession(); if ( session.getPersistenceContextInternal().getEntry( event.getInstanceToLoad() ) != null ) { throw new PersistentObjectException( "attempted to load into an instance that was already associated with the session: " @@ -244,9 +235,9 @@ else if ( persister.hasProxy() ) { private Object loadWithBytecodeProxy(LoadEvent event, EntityPersister persister, EntityKey keyToLoad, LoadType options) { // This is the case where we can use the entity itself as a proxy: // if there is already a managed entity instance associated with the PC, return it - final EventSource session = event.getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final EntityHolder holder = persistenceContext.getEntityHolder( keyToLoad ); + final var session = event.getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); + final var holder = persistenceContext.getEntityHolder( keyToLoad ); final Object managed = holder == null ? null : holder.getEntity(); if ( managed != null ) { return options.isCheckDeleted() && wasDeleted( persistenceContext, managed ) ? null : managed; @@ -268,8 +259,8 @@ else if ( persister.hasSubclasses() ) { private Object loadWithRegularProxy(LoadEvent event, EntityPersister persister, EntityKey keyToLoad, LoadType options) { // This is the case where the proxy is a separate object: // look for a proxy - final PersistenceContext persistenceContext = event.getSession().getPersistenceContextInternal(); - final EntityHolder holder = persistenceContext.getEntityHolder( keyToLoad ); + final var persistenceContext = event.getSession().getPersistenceContextInternal(); + final var holder = persistenceContext.getEntityHolder( keyToLoad ); final Object proxy = holder == null ? null : holder.getProxy(); if ( proxy != null ) { // narrow the existing proxy to the type we're looking for @@ -295,8 +286,8 @@ private static Object loadWithProxyFactory( EntityPersister persister, EntityKey keyToLoad, EntityHolder holder) { - final EventSource session = event.getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var session = event.getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); // if ( persistenceContext.containsDeletedUnloadedEntityKey( keyToLoad ) ) { // // an unloaded proxy with this key was deleted // return null; @@ -369,12 +360,12 @@ private Object narrowedProxy(LoadEvent event, EntityPersister persister, EntityK if ( LOG.isTraceEnabled() ) { LOG.trace( "Entity proxy found in session cache" ); } - final LazyInitializer li = extractLazyInitializer( proxy ); + final var li = extractLazyInitializer( proxy ); if ( li.isUnwrap() ) { return li.getImplementation(); } else { - final PersistenceContext persistenceContext = event.getSession().getPersistenceContextInternal(); + final var persistenceContext = event.getSession().getPersistenceContextInternal(); if ( options.isAllowProxyCreation() ) { return persistenceContext.narrowProxy( proxy, persister, keyToLoad, null ); } @@ -428,7 +419,9 @@ private static Object createProxyIfNecessary( if ( LOG.isTraceEnabled() ) { LOG.trace( "Entity found in session cache" ); } - return options.isCheckDeleted() && wasDeleted( event.getSession().getPersistenceContextInternal(), existing ) ? null : existing; + return options.isCheckDeleted() + && wasDeleted( event.getSession().getPersistenceContextInternal(), existing ) + ? null : existing; } else { if ( LOG.isTraceEnabled() ) { @@ -444,9 +437,9 @@ private static boolean wasDeleted(PersistenceContext persistenceContext, Object private static Object createProxy(LoadEvent event, EntityPersister persister, EntityKey keyToLoad) { // return new uninitialized proxy - final EventSource session = event.getSession(); + final var session = event.getSession(); final Object proxy = persister.createProxy( event.getEntityId(), session ); - PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); persistenceContext.getBatchFetchQueue().addBatchLoadableEntityKey( keyToLoad ); persistenceContext.addProxy( keyToLoad, proxy ); return proxy; @@ -464,8 +457,8 @@ private static Object createProxy(LoadEvent event, EntityPersister persister, En * @return The loaded entity */ private Object lockAndLoad(LoadEvent event, EntityPersister persister, EntityKey keyToLoad, LoadType options) { - final SessionImplementor source = event.getSession(); - final EntityDataAccess cache = persister.getCacheAccessStrategy(); + final var source = event.getSession(); + final var cache = persister.getCacheAccessStrategy(); final SoftLock lock; final Object ck; @@ -512,18 +505,19 @@ private Object lockAndLoad(LoadEvent event, EntityPersister persister, EntityKey * @return The loaded entity, or null. */ private Object doLoad(LoadEvent event, EntityPersister persister, EntityKey keyToLoad, LoadType options) { - final EventSource session = event.getSession(); if ( LOG.isTraceEnabled() ) { - LOG.trace( "Attempting to resolve: " + infoString( persister, event.getEntityId(), event.getFactory() ) ); + LOG.trace( "Attempting to resolve: " + + infoString( persister, event.getEntityId(), event.getFactory() ) ); } + final var session = event.getSession(); if ( session.getPersistenceContextInternal().containsDeletedUnloadedEntityKey( keyToLoad ) ) { return null; } else { - final PersistenceContextEntry persistenceContextEntry = - loadFromSessionCache( keyToLoad, event.getLockOptions(), options, event.getSession() ); + final var persistenceContextEntry = + loadFromSessionCache( keyToLoad, event.getLockOptions(), options, session ); final Object entity = persistenceContextEntry.entity(); if ( entity != null ) { if ( persistenceContextEntry.isManaged() ) { @@ -541,12 +535,10 @@ private Object doLoad(LoadEvent event, EntityPersister persister, EntityKey keyT } private static void initializeIfNecessary(Object entity) { - if ( isPersistentAttributeInterceptable( entity ) ) { - final PersistentAttributeInterceptable interceptable = asPersistentAttributeInterceptable( entity ); - final PersistentAttributeInterceptor interceptor = interceptable.$$_hibernate_getInterceptor(); - if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { - lazinessInterceptor.forceInitialize( entity, null ); - } + if ( isPersistentAttributeInterceptable( entity ) + && asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor() + instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { + lazinessInterceptor.forceInitialize( entity, null ); } } @@ -607,14 +599,12 @@ protected Object loadFromDatasource(final LoadEvent event, final EntityPersister // persister/loader/initializer sensitive to this fact - possibly // passing LoadType along - final LazyInitializer lazyInitializer = extractLazyInitializer( entity ); + final var lazyInitializer = extractLazyInitializer( entity ); final Object impl = lazyInitializer != null ? lazyInitializer.getImplementation() : entity; - - final StatisticsImplementor statistics = event.getFactory().getStatistics(); + final var statistics = event.getFactory().getStatistics(); if ( event.isAssociationFetch() && statistics.isStatisticsEnabled() ) { statistics.fetchEntity( event.getEntityClassName() ); } - return impl; } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLockEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLockEventListener.java index 54bfb98cedd0..259a1290ec62 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLockEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLockEventListener.java @@ -12,12 +12,8 @@ import org.hibernate.engine.internal.ForeignKeys; import org.hibernate.engine.spi.CascadingActions; import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.Status; import org.hibernate.event.spi.AbstractEvent; -import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.LockEvent; import org.hibernate.event.spi.LockEventListener; import org.hibernate.internal.CoreMessageLogger; @@ -58,23 +54,23 @@ public void onLock(LockEvent event) throws HibernateException { throw new NullPointerException( "attempted to lock null" ); } - if ( event.getLockMode() == LockMode.WRITE ) { + final var lockMode = event.getLockMode(); + if ( lockMode == LockMode.WRITE ) { throw new HibernateException( "Invalid lock mode for lock()" ); } - - if ( event.getLockMode() == LockMode.UPGRADE_SKIPLOCKED ) { + if ( lockMode == LockMode.UPGRADE_SKIPLOCKED ) { LOG.explicitSkipLockedLockCombo(); } - final SessionImplementor source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); final Object entity = persistenceContext.unproxyAndReassociate( event.getObject() ); //TODO: if object was an uninitialized proxy, this is inefficient, // resulting in two SQL selects - EntityEntry entry = persistenceContext.getEntry( entity ); + var entry = persistenceContext.getEntry( entity ); if ( entry == null ) { - final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); + final var persister = source.getEntityPersister( event.getEntityName(), entity ); final Object id = persister.getIdentifier( entity, source ); if ( !ForeignKeys.isNotTransient( event.getEntityName(), entity, Boolean.FALSE, source ) ) { throw new TransientObjectException( "Cannot lock unsaved transient instance of entity '" @@ -88,8 +84,8 @@ public void onLock(LockEvent event) throws HibernateException { } private void cascadeOnLock(LockEvent event, EntityPersister persister, Object entity) { - final EventSource source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { Cascade.cascade( @@ -123,9 +119,9 @@ protected final EntityEntry reassociate(AbstractEvent event, Object object, Obje LOG.trace( "Reassociating transient instance: " + infoString( persister, id, event.getFactory() ) ); } - final EventSource source = event.getSession(); - final EntityKey key = source.generateEntityKey( id, persister ); - final PersistenceContext persistenceContext = source.getPersistenceContext(); + final var source = event.getSession(); + final var key = source.generateEntityKey( id, persister ); + final var persistenceContext = source.getPersistenceContext(); persistenceContext.checkUniqueness( key, object ); @@ -139,7 +135,7 @@ protected final EntityEntry reassociate(AbstractEvent event, Object object, Obje source ); - final EntityEntry newEntry = persistenceContext.addEntity( + final var newEntry = persistenceContext.addEntity( object, persister.isMutable() ? Status.MANAGED : Status.READ_ONLY, values, diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultMergeEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultMergeEventListener.java index c98ee56f5c7e..ff3a3e60ebb3 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultMergeEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultMergeEventListener.java @@ -8,7 +8,6 @@ import org.hibernate.AssertionFailure; import org.hibernate.HibernateException; -import org.hibernate.Interceptor; import org.hibernate.ObjectDeletedException; import org.hibernate.StaleObjectStateException; import org.hibernate.WrongClassException; @@ -18,15 +17,8 @@ import org.hibernate.engine.internal.CascadePoint; import org.hibernate.engine.spi.CascadingAction; import org.hibernate.engine.spi.CascadingActions; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EntityEntry; 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.event.spi.EntityCopyObserver; import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.MergeContext; import org.hibernate.event.spi.MergeEvent; @@ -34,10 +26,7 @@ import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.loader.ast.spi.CascadingFetchProfile; -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.type.AnyType; import org.hibernate.type.CollectionType; import org.hibernate.type.ComponentType; @@ -81,10 +70,10 @@ protected Map getMergeMap(MergeContext context) { */ @Override public void onMerge(MergeEvent event) throws HibernateException { - final EventSource session = event.getSession(); - final EntityCopyObserver entityCopyObserver = + final var session = event.getSession(); + final var entityCopyObserver = session.getFactory().getEntityCopyObserver().createEntityCopyObserver(); - final MergeContext mergeContext = new MergeContext( session, entityCopyObserver ); + final var mergeContext = new MergeContext( session, entityCopyObserver ); try { onMerge( event, mergeContext ); entityCopyObserver.topLevelMergeComplete( session ); @@ -104,10 +93,10 @@ public void onMerge(MergeEvent event) throws HibernateException { @Override public void onMerge(MergeEvent event, MergeContext copiedAlready) throws HibernateException { final Object original = event.getOriginal(); - // NOTE : `original` is the value being merged + // NOTE: `original` is the value being merged if ( original != null ) { - final EventSource source = event.getSession(); - final LazyInitializer lazyInitializer = extractLazyInitializer( original ); + final var source = event.getSession(); + final var lazyInitializer = extractLazyInitializer( original ); if ( lazyInitializer != null ) { if ( lazyInitializer.isUninitialized() ) { LOG.trace( "Ignoring uninitialized proxy" ); @@ -118,9 +107,8 @@ public void onMerge(MergeEvent event, MergeContext copiedAlready) throws Hiberna } } else if ( isPersistentAttributeInterceptable( original ) ) { - final PersistentAttributeInterceptor interceptor = - asPersistentAttributeInterceptable( original ).$$_hibernate_getInterceptor(); - if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor proxyInterceptor ) { + if ( asPersistentAttributeInterceptable( original ).$$_hibernate_getInterceptor() + instanceof EnhancementAsProxyLazinessInterceptor proxyInterceptor ) { LOG.trace( "Ignoring uninitialized enhanced proxy" ); event.setResult( source.byId( proxyInterceptor.getEntityName() ) .getReference( proxyInterceptor.getIdentifier() ) ); @@ -155,13 +143,13 @@ private void merge(MergeEvent event, MergeContext copiedAlready, Object entity) // Check the persistence context for an entry relating to this // entity to be merged... final String entityName = event.getEntityName(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - EntityEntry entry = persistenceContext.getEntry( entity ); + final var persistenceContext = source.getPersistenceContextInternal(); + var entry = persistenceContext.getEntry( entity ); final EntityState entityState; final Object copiedId; final Object originalId; if ( entry == null ) { - final EntityPersister persister = source.getEntityPersister( entityName, entity ); + final var persister = source.getEntityPersister( entityName, entity ); originalId = persister.getIdentifier( entity, copiedAlready ); if ( originalId != null ) { final EntityKey entityKey; @@ -212,7 +200,7 @@ private void merge(MergeEvent event, MergeContext copiedAlready, Object entity) break; default: //DELETED if ( persistenceContext.getEntry( entity ) == null ) { - final EntityPersister persister = source.getEntityPersister( entityName, entity ); + final var persister = source.getEntityPersister( entityName, entity ); assert persistenceContext.containsDeletedUnloadedEntityKey( source.generateEntityKey( persister.getIdentifier( entity, event.getSession() ), @@ -233,7 +221,7 @@ private static Object copyCompositeTypeId( CompositeType compositeType, EventSource session, MergeContext mergeContext) { - final SessionFactoryImplementor factory = session.getSessionFactory(); + final var factory = session.getSessionFactory(); final Object idCopy = compositeType.deepCopy( id, factory ); final Type[] subtypes = compositeType.getSubtypes(); final Object[] propertyValues = compositeType.getPropertyValues( id ); @@ -270,8 +258,8 @@ protected void entityIsPersistent(MergeEvent event, MergeContext copyCache) { LOG.trace( "Ignoring persistent instance" ); //TODO: check that entry.getIdentifier().equals(requestedId) final Object entity = event.getEntity(); - final EventSource source = event.getSession(); - final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); + final var source = event.getSession(); + final var persister = source.getEntityPersister( event.getEntityName(), entity ); copyCache.put( entity, entity, true ); //before cascade! cascadeOnMerge( source, persister, entity, copyCache ); TypeHelper.replace( persister, entity, source, entity, copyCache ); @@ -282,10 +270,10 @@ protected void entityIsTransient(MergeEvent event, Object id, MergeContext copyC LOG.trace( "Merging transient instance" ); final Object entity = event.getEntity(); - final EventSource session = event.getSession(); - final Interceptor interceptor = session.getInterceptor(); + final var session = event.getSession(); + final var interceptor = session.getInterceptor(); final String entityName = event.getEntityName(); - final EntityPersister persister = session.getEntityPersister( entityName, entity ); + final var persister = session.getEntityPersister( entityName, entity ); final String[] propertyNames = persister.getPropertyNames(); final Type[] propertyTypes = persister.getPropertyTypes(); final Object copy = copyEntity( copyCache, entity, session, persister, id ); @@ -342,12 +330,9 @@ protected void entityIsTransient(MergeEvent event, Object id, MergeContext copyC event.setResult( copy ); - if ( isPersistentAttributeInterceptable( copy ) ) { - final PersistentAttributeInterceptor attributeInterceptor = - asPersistentAttributeInterceptable( copy ).$$_hibernate_getInterceptor(); - if ( attributeInterceptor == null ) { - persister.getBytecodeEnhancementMetadata().injectInterceptor( copy, id, session ); - } + if ( isPersistentAttributeInterceptable( copy ) + && asPersistentAttributeInterceptable( copy ).$$_hibernate_getInterceptor() == null ) { + persister.getBytecodeEnhancementMetadata().injectInterceptor( copy, id, session ); } } @@ -373,11 +358,12 @@ private static class CollectionVisitor extends WrapVisitor { @Override protected Object processCollection(Object collection, CollectionType collectionType) { if ( collection instanceof PersistentCollection persistentCollection ) { - final CollectionPersister persister = + final var persister = getSession().getFactory().getMappingMetamodel() .getCollectionDescriptor( collectionType.getRole() ); - final CollectionEntry collectionEntry = - getSession().getPersistenceContextInternal().getCollectionEntry( persistentCollection ); + final var collectionEntry = + getSession().getPersistenceContextInternal() + .getCollectionEntry( persistentCollection ); if ( !persistentCollection.equalsSnapshot( persister ) ) { collectionEntry.resetStoredSnapshot( persistentCollection, persistentCollection.getSnapshot( persister ) ); } @@ -411,15 +397,16 @@ protected void entityIsDetached(MergeEvent event, Object copiedId, Object origin LOG.trace( "Merging detached instance" ); final Object entity = event.getEntity(); - final EventSource session = event.getSession(); - final EntityPersister persister = session.getEntityPersister( event.getEntityName(), entity ); + final var session = event.getSession(); + final var persister = session.getEntityPersister( event.getEntityName(), entity ); final String entityName = persister.getEntityName(); if ( originalId == null ) { originalId = persister.getIdentifier( entity, session ); } - final Object clonedIdentifier = copiedId == null - ? persister.getIdentifierType().deepCopy( originalId, event.getFactory() ) - : copiedId; + final Object clonedIdentifier = + copiedId == null + ? persister.getIdentifierType().deepCopy( originalId, event.getFactory() ) + : copiedId; final Object id = getDetachedEntityId( event, originalId, persister ); // we must clone embedded composite identifiers, or we will get back the same instance that we pass in // apply the special MERGE fetch profile and perform the resolution (Session#get) @@ -455,7 +442,7 @@ protected void entityIsDetached(MergeEvent event, Object copiedId, Object origin // copy created before we actually copy cascadeOnMerge( session, persister, entity, copyCache ); - final Interceptor interceptor = session.getInterceptor(); + final var interceptor = session.getInterceptor(); final String[] propertyNames = persister.getPropertyNames(); final Type[] propertyTypes = persister.getPropertyTypes(); @@ -479,7 +466,7 @@ protected void entityIsDetached(MergeEvent event, Object copiedId, Object origin } private static Object targetEntity(MergeEvent event, Object entity, EntityPersister persister, Object id, Object result) { - final EventSource source = event.getSession(); + final var source = event.getSession(); final String entityName = persister.getEntityName(); final Object target = unproxyManagedForDetachedMerging( entity, result, persister, source ); if ( target == entity) { @@ -493,7 +480,7 @@ else if ( !source.getEntityName( target ).equals( entityName ) ) { ); } else if ( isVersionChanged( entity, source, persister, target ) ) { - final StatisticsImplementor statistics = source.getFactory().getStatistics(); + final var statistics = source.getFactory().getStatistics(); if ( statistics.isStatisticsEnabled() ) { statistics.optimisticFailure( entityName ); } @@ -505,7 +492,7 @@ else if ( isVersionChanged( entity, source, persister, target ) ) { } private static Object getDetachedEntityId(MergeEvent event, Object originalId, EntityPersister persister) { - final EventSource source = event.getSession(); + final var source = event.getSession(); final Object id = event.getRequestedId(); if ( id == null ) { return originalId; @@ -531,9 +518,9 @@ private static Object unproxyManagedForDetachedMerging( if ( isPersistentAttributeInterceptable( incoming ) && persister.getBytecodeEnhancementMetadata().isEnhancedForLazyLoading() ) { - final PersistentAttributeInterceptor incomingInterceptor = + final var incomingInterceptor = asPersistentAttributeInterceptable( incoming ).$$_hibernate_getInterceptor(); - final PersistentAttributeInterceptor managedInterceptor = + final var managedInterceptor = asPersistentAttributeInterceptable( managed ).$$_hibernate_getInterceptor(); // todo - do we need to specially handle the case where both `incoming` and `managed` @@ -561,8 +548,8 @@ private static void markInterceptorDirty(final Object entity, final Object targe // for enhanced entities, copy over the dirty attributes if ( isSelfDirtinessTracker( entity ) && isSelfDirtinessTracker( target ) ) { // clear, because setting the embedded attributes dirties them - final ManagedEntity managedEntity = asManagedEntity( target ); - final SelfDirtinessTracker selfDirtinessTrackerTarget = asSelfDirtinessTracker( target ); + final var managedEntity = asManagedEntity( target ); + final var selfDirtinessTrackerTarget = asSelfDirtinessTracker( target ); if ( !selfDirtinessTrackerTarget.$$_hibernate_hasDirtyAttributes() && !asManagedEntity( entity ).$$_hibernate_useTracker() ) { managedEntity.$$_hibernate_setUseTracker( false ); @@ -602,8 +589,8 @@ private static boolean isVersionChanged(Object entity, EventSource source, Entit } private static boolean existsInDatabase(Object entity, EventSource source, EntityPersister persister) { - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - EntityEntry entry = persistenceContext.getEntry( entity ); + final var persistenceContext = source.getPersistenceContextInternal(); + var entry = persistenceContext.getEntry( entity ); if ( entry == null ) { final Object id = persister.getIdentifier( entity, source ); if ( id != null ) { @@ -629,7 +616,7 @@ protected void cascadeOnMerge( final EntityPersister persister, final Object entity, final MergeContext copyCache) { - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { Cascade.cascade( diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java index 692b4ba1ed57..42b43ee0508c 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPersistEventListener.java @@ -20,7 +20,6 @@ import org.hibernate.jpa.event.spi.CallbackRegistryConsumer; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; import static org.hibernate.event.internal.EntityState.getEntityState; import static org.hibernate.pretty.MessageHelper.infoString; @@ -61,7 +60,7 @@ public void onPersist(PersistEvent event) throws HibernateException { @Override public void onPersist(PersistEvent event, PersistContext createCache) throws HibernateException { final Object object = event.getObject(); - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( object ); + final var lazyInitializer = HibernateProxy.extractLazyInitializer( object ); if ( lazyInitializer != null ) { if ( lazyInitializer.isUninitialized() ) { if ( lazyInitializer.getSession() != event.getSession() ) { @@ -78,8 +77,8 @@ public void onPersist(PersistEvent event, PersistContext createCache) throws Hib } private void persist(PersistEvent event, PersistContext createCache, Object entity) { - final EventSource source = event.getSession(); - final EntityEntry entityEntry = source.getPersistenceContextInternal().getEntry( entity ); + final var source = event.getSession(); + final var entityEntry = source.getPersistenceContextInternal().getEntry( entity ); final String entityName = entityName( event, entity, entityEntry ); switch ( getEntityState( entity, entityName, entityEntry, source, true ) ) { case DETACHED: @@ -120,7 +119,7 @@ private static String entityName(PersistEvent event, Object entity, EntityEntry protected void entityIsPersistent(PersistEvent event, PersistContext createCache) { LOG.trace( "Ignoring persistent instance" ); - final EventSource source = event.getSession(); + final var source = event.getSession(); //TODO: check that entry.getIdentifier().equals(requestedId) final Object entity = source.getPersistenceContextInternal().unproxy( event.getObject() ); if ( createCache.add( entity ) ) { @@ -142,7 +141,7 @@ private void justCascade(PersistContext createCache, EventSource source, Object */ protected void entityIsTransient(PersistEvent event, PersistContext createCache) { LOG.trace( "Persisting transient instance" ); - final EventSource source = event.getSession(); + final var source = event.getSession(); final Object entity = source.getPersistenceContextInternal().unproxy( event.getObject() ); if ( createCache.add( entity ) ) { saveWithGeneratedId( entity, event.getEntityName(), createCache, source, false ); @@ -150,9 +149,9 @@ protected void entityIsTransient(PersistEvent event, PersistContext createCache) } private void entityIsDeleted(PersistEvent event, PersistContext createCache) { - final EventSource source = event.getSession(); + final var source = event.getSession(); final Object entity = source.getPersistenceContextInternal().unproxy( event.getObject() ); - final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); + final var persister = source.getEntityPersister( event.getEntityName(), entity ); if ( LOG.isTraceEnabled() ) { final Object id = persister.getIdentifier( entity, source ); LOG.trace( "Unscheduling entity deletion: " + infoString( persister, id, source.getFactory() ) ); diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPostLoadEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPostLoadEventListener.java index c9b4c8f670e6..e7130c4e8aca 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPostLoadEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPostLoadEventListener.java @@ -7,17 +7,14 @@ import org.hibernate.AssertionFailure; import org.hibernate.HibernateException; -import org.hibernate.LockMode; import org.hibernate.action.internal.EntityIncrementVersionProcess; import org.hibernate.action.internal.EntityVerifyVersionProcess; import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.PostLoadEvent; import org.hibernate.event.spi.PostLoadEventListener; import org.hibernate.internal.OptimisticLockHelper; import org.hibernate.jpa.event.spi.CallbackRegistry; import org.hibernate.jpa.event.spi.CallbackRegistryConsumer; -import org.hibernate.persister.entity.EntityPersister; /** * Performs needed {@link EntityEntry#getLockMode()}-related processing. @@ -39,15 +36,15 @@ public void onPostLoad(PostLoadEvent event) { callbackRegistry.postLoad( entity ); - final EventSource session = event.getSession(); - final EntityEntry entry = session.getPersistenceContextInternal().getEntry( entity ); + final var session = event.getSession(); + final var entry = session.getPersistenceContextInternal().getEntry( entity ); if ( entry == null ) { throw new AssertionFailure( "possible non-threadsafe access to the session" ); } - final LockMode lockMode = entry.getLockMode(); + final var lockMode = entry.getLockMode(); if ( lockMode.requiresVersion() ) { - final EntityPersister persister = entry.getPersister(); + final var persister = entry.getPersister(); if ( persister.isVersioned() ) { switch ( lockMode ) { case PESSIMISTIC_FORCE_INCREMENT: diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPreLoadEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPreLoadEventListener.java index 0f11d7be6ec1..218ffb6ff1f1 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPreLoadEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultPreLoadEventListener.java @@ -6,7 +6,6 @@ import org.hibernate.event.spi.PreLoadEvent; import org.hibernate.event.spi.PreLoadEventListener; -import org.hibernate.persister.entity.EntityPersister; /** * Called before injecting property values into a newly @@ -18,7 +17,7 @@ public class DefaultPreLoadEventListener implements PreLoadEventListener { @Override public void onPreLoad(PreLoadEvent event) { - final EntityPersister persister = event.getPersister(); + final var persister = event.getPersister(); event.getSession().getInterceptor().onLoad( event.getEntity(), event.getId(), diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultRefreshEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultRefreshEventListener.java index c4418fa45b81..797ed7220049 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultRefreshEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultRefreshEventListener.java @@ -15,11 +15,9 @@ import org.hibernate.cache.spi.access.SoftLock; import org.hibernate.engine.internal.Cascade; import org.hibernate.engine.internal.CascadePoint; -import org.hibernate.engine.spi.ActionQueue; import org.hibernate.engine.spi.CascadingActions; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.RefreshContext; import org.hibernate.event.spi.RefreshEvent; @@ -27,7 +25,6 @@ import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.loader.ast.spi.CascadingFetchProfile; -import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.proxy.LazyInitializer; @@ -59,8 +56,8 @@ public void onRefresh(RefreshEvent event) throws HibernateException { */ @Override public void onRefresh(RefreshEvent event, RefreshContext refreshedAlready) { - final EventSource source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); final Object object = event.getObject(); if ( persistenceContext.reassociateIfUninitializedProxy( object ) ) { handleUninitializedProxy( event, refreshedAlready, source, object, persistenceContext ); @@ -87,8 +84,8 @@ private static void handleUninitializedProxy( // refresh of the parent will take care of initializing the lazy entity and setting the // correct lock. This is needed only when the refresh is called directly on a lazy entity. if ( refreshedAlready.isEmpty() ) { - final LazyInitializer lazyInitializer = extractLazyInitializer( object ); - final EntityPersister persister = getPersister( lazyInitializer, source, object, isTransient ); + final var lazyInitializer = extractLazyInitializer( object ); + final var persister = getPersister( lazyInitializer, source, object, isTransient ); refresh( event, null, @@ -131,9 +128,9 @@ private static boolean isTransient(RefreshEvent event, EventSource source, Objec } private static void refresh(RefreshEvent event, RefreshContext refreshedAlready, Object object) { - final EventSource source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); - final EntityEntry entry = persistenceContext.getEntry( object ); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); + final var entry = persistenceContext.getEntry( object ); final EntityPersister persister; final Object id; @@ -328,9 +325,9 @@ private static void evictCachedCollections(EntityPersister persister, Object id, private static void evictCachedCollections(Type[] types, Object id, EventSource source) throws HibernateException { - final SessionFactoryImplementor factory = source.getFactory(); - final ActionQueue actionQueue = source.getActionQueue(); - final MappingMetamodelImplementor metamodel = factory.getMappingMetamodel(); + final var factory = source.getFactory(); + final var actionQueue = source.getActionQueue(); + final var metamodel = factory.getMappingMetamodel(); for ( Type type : types ) { if ( type instanceof CollectionType collectionType ) { final CollectionPersister collectionPersister = diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultReplicateEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultReplicateEventListener.java index b095ed0f6f52..bb6c35dcacb9 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultReplicateEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultReplicateEventListener.java @@ -12,8 +12,6 @@ import org.hibernate.engine.internal.CascadePoint; import org.hibernate.engine.spi.CascadingAction; import org.hibernate.engine.spi.CascadingActions; -import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.Status; import org.hibernate.event.spi.EventSource; @@ -50,8 +48,8 @@ public class DefaultReplicateEventListener */ @Override public void onReplicate(ReplicateEvent event) { - final EventSource source = event.getSession(); - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var source = event.getSession(); + final var persistenceContext = source.getPersistenceContextInternal(); if ( persistenceContext.reassociateIfUninitializedProxy( event.getObject() ) ) { LOG.trace( "Uninitialized proxy passed to replicate()" ); } @@ -68,8 +66,8 @@ public void onReplicate(ReplicateEvent event) { } private void doReplicate(ReplicateEvent event, EventSource source, Object entity) { - final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity); - final ReplicationMode replicationMode = event.getReplicationMode(); + final var persister = source.getEntityPersister( event.getEntityName(), entity); + final var replicationMode = event.getReplicationMode(); // get the id from the object - we accept almost anything at all, // except null (that is, even ids which look like they're unsaved) @@ -110,7 +108,7 @@ else if ( LOG.isTraceEnabled() ) { + infoString( persister, id, event.getFactory() ) ); } final boolean regenerate = persister.isIdentifierAssignedByInsert(); // prefer re-generation of identity! - final EntityKey key = regenerate ? null : source.generateEntityKey( id, persister ); + final var key = regenerate ? null : source.generateEntityKey( id, persister ); performSaveOrReplicate( entity, key, persister, regenerate, replicationMode, source, false ); } } @@ -128,7 +126,7 @@ protected boolean visitCollectionsBeforeSave( Type[] types, EventSource source) { //TODO: we use two visitors here, inefficient! - OnReplicateVisitor visitor = new OnReplicateVisitor( source, id, entity, false ); + final var visitor = new OnReplicateVisitor( source, id, entity, false ); visitor.processEntityPropertyValues( values, types ); return super.visitCollectionsBeforeSave( entity, id, values, types, source ); } @@ -182,7 +180,7 @@ private void cascadeAfterReplicate( EntityPersister persister, ReplicationMode replicationMode, EventSource source) { - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); persistenceContext.incrementCascadeLevel(); try { Cascade.cascade( diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DirtyCollectionSearchVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DirtyCollectionSearchVisitor.java index 04873df283b2..2fc85ce48919 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DirtyCollectionSearchVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DirtyCollectionSearchVisitor.java @@ -7,8 +7,6 @@ import org.hibernate.HibernateException; import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; -import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.spi.EventSource; import org.hibernate.type.CollectionType; @@ -33,13 +31,14 @@ public class DirtyCollectionSearchVisitor extends AbstractVisitor { public DirtyCollectionSearchVisitor(Object entity, EventSource session, boolean[] propertyVersionability) { super( session ); - EnhancementAsProxyLazinessInterceptor interceptor = null; - if ( isPersistentAttributeInterceptable( entity ) ) { - PersistentAttributeInterceptor attributeInterceptor = - asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor(); - if ( attributeInterceptor instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { - interceptor = lazinessInterceptor; - } + final EnhancementAsProxyLazinessInterceptor interceptor; + if ( isPersistentAttributeInterceptable( entity ) + && asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor() + instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) { + interceptor = lazinessInterceptor; + } + else { + interceptor = null; } this.interceptor = interceptor; this.propertyVersionability = propertyVersionability; @@ -52,7 +51,7 @@ public boolean wasDirtyCollectionFound() { @Override Object processCollection(Object collection, CollectionType type) throws HibernateException { if ( collection != null ) { - final SessionImplementor session = getSession(); + final var session = getSession(); if ( type.isArrayType() ) { // if no array holder we found an unwrapped array, it's dirty // (this can't occur, because we now always call wrap() before getting to here) diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyAllowedLoggedObserver.java b/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyAllowedLoggedObserver.java index 198204284d13..33902fd089a9 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyAllowedLoggedObserver.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyAllowedLoggedObserver.java @@ -128,12 +128,13 @@ public void topLevelMergeComplete(EventSource session) { for ( var entry : managedToMergeEntitiesXref.entrySet() ) { final Object managedEntity = entry.getKey(); final Set mergeEntities = entry.getValue(); - final StringBuilder sb = new StringBuilder( "Details: merged ") - .append( mergeEntities.size() ) - .append( " representations of the same entity " ) - .append( infoString( session.getEntityName( managedEntity ), - session.getIdentifier( managedEntity ) ) ) - .append( " being merged: " ); + final var sb = + new StringBuilder( "Details: merged ") + .append( mergeEntities.size() ) + .append( " representations of the same entity " ) + .append( infoString( session.getEntityName( managedEntity ), + session.getIdentifier( managedEntity ) ) ) + .append( " being merged: " ); boolean first = true; for ( Object mergeEntity : mergeEntities ) { if ( first ) { diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyObserverFactoryInitiator.java b/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyObserverFactoryInitiator.java index fa735260b16a..74c102e0d844 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyObserverFactoryInitiator.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/EntityCopyObserverFactoryInitiator.java @@ -16,6 +16,8 @@ import org.hibernate.internal.CoreMessageLogger; import org.hibernate.service.spi.ServiceRegistryImplementor; +import static org.hibernate.cfg.AvailableSettings.MERGE_ENTITY_COPY_OBSERVER; + /** * Looks for the configuration property {@value AvailableSettings#MERGE_ENTITY_COPY_OBSERVER} and registers * the matching {@link EntityCopyObserverFactory} based on the configuration observerClass. @@ -69,7 +71,7 @@ else if ( value.equals( EntityCopyAllowedLoggedObserver.SHORT_NAME ) } private Object getConfigurationValue(final Map configurationValues) { - final Object value = configurationValues.get( AvailableSettings.MERGE_ENTITY_COPY_OBSERVER ); + final Object value = configurationValues.get( MERGE_ENTITY_COPY_OBSERVER ); if ( value == null ) { return EntityCopyNotAllowedObserver.SHORT_NAME; //default } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/EntityState.java b/hibernate-core/src/main/java/org/hibernate/event/internal/EntityState.java index 4720ca4d00f3..1f8eb2103063 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/EntityState.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/EntityState.java @@ -6,13 +6,10 @@ import org.hibernate.engine.internal.ForeignKeys; import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.Status; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.persister.entity.EntityPersister; import static org.hibernate.event.internal.EventUtil.getLoggableName; @@ -69,11 +66,11 @@ public static EntityState getEntityState( LOG.trace( "Detached instance of: " + getLoggableName( entityName, entity ) ); } - final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); + final var persistenceContext = source.getPersistenceContextInternal(); if ( persistenceContext.containsDeletedUnloadedEntityKeys() ) { - final EntityPersister entityPersister = source.getEntityPersister( entityName, entity ); + final var entityPersister = source.getEntityPersister( entityName, entity ); final Object identifier = entityPersister.getIdentifier( entity, source ); - final EntityKey entityKey = source.generateEntityKey( identifier, entityPersister ); + final var entityKey = source.generateEntityKey( identifier, entityPersister ); if ( persistenceContext.containsDeletedUnloadedEntityKey( entityKey ) ) { return EntityState.DELETED; } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/EvictVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/EvictVisitor.java index e76a8e2ad536..bb860bb45fd5 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/EvictVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/EvictVisitor.java @@ -7,13 +7,10 @@ import org.hibernate.HibernateException; import org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; import org.hibernate.engine.spi.CollectionKey; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.event.spi.EventSource; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.type.CollectionType; import static org.hibernate.pretty.MessageHelper.collectionInfoString; @@ -44,7 +41,7 @@ Object processCollection(Object collection, CollectionType type) throws Hibernat } public void evictCollection(Object value, CollectionType type) { - final EventSource session = getSession(); + final var session = getSession(); final PersistentCollection collection; if ( type.hasHolder() ) { collection = session.getPersistenceContextInternal().removeCollectionHolder( value ); @@ -66,10 +63,10 @@ else if ( value == LazyPropertyInitializer.UNFETCHED_PROPERTY ) { } private void evictCollection(PersistentCollection collection) { - final EventSource session = getSession(); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); - final CollectionEntry ce = persistenceContext.removeCollectionEntry( collection ); - final CollectionPersister persister = ce.getLoadedPersister(); + final var session = getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); + final var ce = persistenceContext.removeCollectionEntry( collection ); + final var persister = ce.getLoadedPersister(); final Object loadedKey = ce.getLoadedKey(); if ( LOG.isTraceEnabled() ) { diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/FlushVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/FlushVisitor.java index e364397613e0..09c9d73fe85b 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/FlushVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/FlushVisitor.java @@ -32,7 +32,7 @@ Object processCollection(Object collection, CollectionType type) throws Hibernat return null; } else if ( collection != null ) { - final EventSource session = getSession(); + final var session = getSession(); final PersistentCollection persistentCollection; if ( type.hasHolder() ) { persistentCollection = session.getPersistenceContextInternal().getCollectionHolder( collection ); diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/OnLockVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/OnLockVisitor.java index a5d8c02c35a9..b9a2eb71fcd4 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/OnLockVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/OnLockVisitor.java @@ -6,9 +6,7 @@ import org.hibernate.HibernateException; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.spi.EventSource; -import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.type.CollectionType; /** @@ -34,8 +32,8 @@ public Object processCollection(Object collection, CollectionType type) throws H return null; } - final SessionImplementor session = getSession(); - final CollectionPersister persister = + final var session = getSession(); + final var persister = session.getFactory().getMappingMetamodel() .getCollectionDescriptor( type.getRole() ); if ( collection instanceof PersistentCollection persistentCollection ) { diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/OnReplicateVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/OnReplicateVisitor.java index 64d13d580a52..a29866e9b476 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/OnReplicateVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/OnReplicateVisitor.java @@ -7,7 +7,6 @@ import org.hibernate.HibernateException; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.event.spi.EventSource; -import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.type.CollectionType; /** @@ -37,8 +36,8 @@ public Object processCollection(Object collection, CollectionType type) throws H return null; } - final EventSource session = getSession(); - final CollectionPersister persister = + final var session = getSession(); + final var persister = session.getFactory().getMappingMetamodel() .getCollectionDescriptor( type.getRole() ); if ( isUpdate ) { diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/OnUpdateVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/OnUpdateVisitor.java index 34a7b2b82524..4e083feb66e5 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/OnUpdateVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/OnUpdateVisitor.java @@ -7,7 +7,6 @@ import org.hibernate.HibernateException; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.event.spi.EventSource; -import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.type.CollectionType; /** @@ -32,8 +31,8 @@ Object processCollection(Object collection, CollectionType type) throws Hibernat return null; } - final EventSource session = getSession(); - final CollectionPersister persister = + final var session = getSession(); + final var persister = session.getFactory().getMappingMetamodel() .getCollectionDescriptor( type.getRole() ); final Object collectionKey = extractCollectionKeyFromOwner( persister ); diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/ProxyVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/ProxyVisitor.java index 98bfec85d695..7d08753bb5d4 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/ProxyVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/ProxyVisitor.java @@ -7,7 +7,6 @@ import org.hibernate.HibernateException; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.event.spi.EventSource; -import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.type.CollectionType; import org.hibernate.type.EntityType; @@ -55,18 +54,19 @@ private static boolean isCollectionSnapshotValid(PersistentCollection snapsho */ protected void reattachCollection(PersistentCollection collection, CollectionType type) throws HibernateException { - final EventSource session = getSession(); - final MappingMetamodelImplementor metamodel = session.getFactory().getMappingMetamodel(); + final var session = getSession(); + final var metamodel = session.getFactory().getMappingMetamodel(); + final var context = session.getPersistenceContext(); if ( collection.wasInitialized() ) { - final CollectionPersister persister = metamodel.getCollectionDescriptor( type.getRole() ); - session.getPersistenceContext().addInitializedDetachedCollection( persister, collection ); + final var persister = metamodel.getCollectionDescriptor( type.getRole() ); + context.addInitializedDetachedCollection( persister, collection ); } else { if ( !isCollectionSnapshotValid( collection ) ) { throw new HibernateException( "could not re-associate uninitialized transient collection" ); } - final CollectionPersister persister = metamodel.getCollectionDescriptor( collection.getRole() ); - session.getPersistenceContext().addUninitializedDetachedCollection( persister, collection ); + final var persister = metamodel.getCollectionDescriptor( collection.getRole() ); + context.addUninitializedDetachedCollection( persister, collection ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/WrapVisitor.java b/hibernate-core/src/main/java/org/hibernate/event/internal/WrapVisitor.java index dc7d3691e405..d2f49d82baf5 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/WrapVisitor.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/WrapVisitor.java @@ -9,16 +9,10 @@ import org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor; import org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; import org.hibernate.engine.spi.CollectionKey; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.PersistentAttributeInterceptor; -import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.spi.EventSource; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.type.CollectionType; import org.hibernate.type.CompositeType; @@ -74,55 +68,53 @@ final Object processArrayOrNewCollection(Object collection, CollectionType colle return null; } else { - final SessionImplementor session = getSession(); - final CollectionPersister persister = + final var session = getSession(); + final var persister = session.getFactory().getMappingMetamodel() .getCollectionDescriptor( collectionType.getRole() ); - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); //TODO: move into collection type, so we can use polymorphism! if ( collectionType.hasHolder() ) { - if ( collection != CollectionType.UNFETCHED_COLLECTION ) { - if ( persistenceContext.getCollectionHolder( collection ) == null ) { - final PersistentCollection collectionHolder = collectionType.wrap( session, collection ); - persistenceContext.addNewCollection( persister, collectionHolder ); - persistenceContext.addCollectionHolder( collectionHolder ); - } + if ( collection != CollectionType.UNFETCHED_COLLECTION + && persistenceContext.getCollectionHolder( collection ) == null ) { + final var collectionHolder = collectionType.wrap( session, collection ); + persistenceContext.addNewCollection( persister, collectionHolder ); + persistenceContext.addCollectionHolder( collectionHolder ); } return null; } else { if ( isPersistentAttributeInterceptable( entity ) ) { - final PersistentAttributeInterceptor attributeInterceptor = + final var attributeInterceptor = asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor(); if ( attributeInterceptor instanceof EnhancementAsProxyLazinessInterceptor ) { return null; } - else if ( attributeInterceptor != null - && ((LazyAttributeLoadingInterceptor) attributeInterceptor) - .isAttributeLoaded( persister.getAttributeMapping().getAttributeName() ) ) { - final EntityEntry entry = persistenceContext.getEntry( entity ); - if ( entry.isExistsInDatabase() ) { - final Object key = getCollectionKey( persister, entity, entry, session ); - if ( key != null ) { - PersistentCollection collectionInstance = - persistenceContext.getCollection( new CollectionKey( persister, key ) ); - if ( collectionInstance == null ) { - // the collection has not been initialized and new collection values have been assigned, - // we need to be sure to delete all the collection elements before inserting the new ones - collectionInstance = - persister.getCollectionSemantics() - .instantiateWrapper( key, persister, session ); - persistenceContext.addUninitializedCollection( persister, collectionInstance, key ); - final CollectionEntry collectionEntry = - persistenceContext.getCollectionEntry( collectionInstance ); - collectionEntry.setDoremove( true ); + else if ( attributeInterceptor != null ) { + final var lazyLoadingInterceptor = (LazyAttributeLoadingInterceptor) attributeInterceptor; + if ( lazyLoadingInterceptor.isAttributeLoaded( persister.getAttributeMapping().getAttributeName() ) ) { + final var entry = persistenceContext.getEntry( entity ); + if ( entry.isExistsInDatabase() ) { + final Object key = getCollectionKey( persister, entity, entry, session ); + if ( key != null ) { + var collectionInstance = + persistenceContext.getCollection( new CollectionKey( persister, key ) ); + if ( collectionInstance == null ) { + // the collection has not been initialized and new collection values have been assigned, + // we need to be sure to delete all the collection elements before inserting the new ones + collectionInstance = + persister.getCollectionSemantics() + .instantiateWrapper( key, persister, session ); + persistenceContext.addUninitializedCollection( persister, collectionInstance, key ); + persistenceContext.getCollectionEntry( collectionInstance ).setDoremove( true ); + } } } } } } - final PersistentCollection persistentCollection = collectionType.wrap( session, collection ); + final var persistentCollection = collectionType.wrap( session, collection ); persistenceContext.addNewCollection( persister, persistentCollection ); if ( LOG.isTraceEnabled() ) { LOG.trace( "Wrapped collection in role: " + collectionType.getRole() ); diff --git a/hibernate-core/src/main/java/org/hibernate/event/spi/AbstractCollectionEvent.java b/hibernate-core/src/main/java/org/hibernate/event/spi/AbstractCollectionEvent.java index ddee54c7d90d..33e93d63e55f 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/spi/AbstractCollectionEvent.java +++ b/hibernate-core/src/main/java/org/hibernate/event/spi/AbstractCollectionEvent.java @@ -5,8 +5,6 @@ package org.hibernate.event.spi; import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.EntityEntry; import org.hibernate.persister.collection.CollectionPersister; /** @@ -66,8 +64,8 @@ public AbstractCollectionEvent( } protected static CollectionPersister getLoadedCollectionPersister( PersistentCollection collection, EventSource source ) { - CollectionEntry ce = source.getPersistenceContextInternal().getCollectionEntry( collection ); - return ce == null ? null : ce.getLoadedPersister(); + final var entry = source.getPersistenceContextInternal().getCollectionEntry( collection ); + return entry == null ? null : entry.getLoadedPersister(); } protected static Object getLoadedOwnerOrNull( PersistentCollection collection, EventSource source ) { @@ -79,7 +77,7 @@ protected static Object getLoadedOwnerIdOrNull(PersistentCollection collectio } protected static Object getOwnerIdOrNull(Object owner, EventSource source ) { - final EntityEntry ownerEntry = source.getPersistenceContextInternal().getEntry( owner ); + final var ownerEntry = source.getPersistenceContextInternal().getEntry( owner ); return ownerEntry == null ? null : ownerEntry.getId(); } @@ -88,7 +86,7 @@ protected static String getAffectedOwnerEntityName( Object affectedOwner, EventSource source ) { if ( affectedOwner != null ) { - final EntityEntry entry = + final var entry = source.getPersistenceContextInternal() .getEntry( affectedOwner ); if ( entry != null && entry.getEntityName() != null ) { @@ -96,15 +94,12 @@ protected static String getAffectedOwnerEntityName( } } - if ( collectionPersister != null ) { - return collectionPersister.getOwnerEntityPersister().getEntityName(); - } - else { - // collectionPersister should not be null, - // but we don't want to throw an exception - // if it is null - return null; - } + return collectionPersister != null + ? collectionPersister.getOwnerEntityPersister().getEntityName() + // collectionPersister should not be null, + // but we don't want to throw an exception + // if it is null + : null; } public PersistentCollection getCollection() { diff --git a/hibernate-core/src/main/java/org/hibernate/graph/EntityGraphs.java b/hibernate-core/src/main/java/org/hibernate/graph/EntityGraphs.java index a5230ac381e3..9d38c57924e1 100644 --- a/hibernate-core/src/main/java/org/hibernate/graph/EntityGraphs.java +++ b/hibernate-core/src/main/java/org/hibernate/graph/EntityGraphs.java @@ -321,7 +321,7 @@ public static boolean areEqual(EntityGraph a, EntityGraph b) { return false; } for ( AttributeNode aNode : aNodes ) { - String attributeName = aNode.getAttributeName(); + final String attributeName = aNode.getAttributeName(); AttributeNode bNode = null; for ( AttributeNode bCandidate : bNodes ) { if ( attributeName.equals( bCandidate.getAttributeName() ) ) {