Skip to content

Commit

Permalink
HHH-14622 Improved iteration of PreLoadEventListener
Browse files Browse the repository at this point in the history
  • Loading branch information
Sanne committed May 20, 2021
1 parent ccc5eb1 commit e6688f8
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 50 deletions.
Expand Up @@ -105,29 +105,6 @@ public static void postHydrate(
}
}

/**
* @deprecated This method will be removed. Use {@link #initializeEntity(Object, boolean, SharedSessionContractImplementor, PreLoadEvent, Iterable)} instead.
*
* @param entity The entity being loaded
* @param readOnly Is the entity being loaded as read-only
* @param session The Session
* @param preLoadEvent The (re-used) pre-load event
*/
@Deprecated
public static void initializeEntity(
final Object entity,
final boolean readOnly,
final SharedSessionContractImplementor session,
final PreLoadEvent preLoadEvent) {
final EventListenerGroup<PreLoadEventListener> listenerGroup = session
.getFactory()
.getServiceRegistry()
.getService( EventListenerRegistry.class )
.getEventListenerGroup( EventType.PRE_LOAD );
final Iterable<PreLoadEventListener> listeners = listenerGroup.listeners();
initializeEntity( entity, readOnly, session, preLoadEvent, listeners, EntityResolver.DEFAULT );
}

/**
* Perform the second step of 2-phase load. Fully initialize the entity
* instance.
Expand All @@ -140,15 +117,13 @@ public static void initializeEntity(
* @param readOnly Is the entity being loaded as read-only
* @param session The Session
* @param preLoadEvent The (re-used) pre-load event
* @param preLoadEventListeners the pre-load event listeners
*/
public static void initializeEntity(
final Object entity,
final boolean readOnly,
final SharedSessionContractImplementor session,
final PreLoadEvent preLoadEvent,
final Iterable<PreLoadEventListener> preLoadEventListeners) {
initializeEntity( entity, readOnly, session, preLoadEvent, preLoadEventListeners, EntityResolver.DEFAULT );
final PreLoadEvent preLoadEvent) {
initializeEntity( entity, readOnly, session, preLoadEvent, EntityResolver.DEFAULT );
}

/**
Expand All @@ -163,7 +138,6 @@ public static void initializeEntity(
* @param readOnly Is the entity being loaded as read-only
* @param session The Session
* @param preLoadEvent The (re-used) pre-load event
* @param preLoadEventListeners the pre-load event listeners
* @param entityResolver the resolver used for to-one entity associations
* (not used when an entity is a bytecode-enhanced lazy entity)
*/
Expand All @@ -172,15 +146,14 @@ public static void initializeEntity(
final boolean readOnly,
final SharedSessionContractImplementor session,
final PreLoadEvent preLoadEvent,
final Iterable<PreLoadEventListener> preLoadEventListeners,
final EntityResolver entityResolver) {
final PersistenceContext persistenceContext = session.getPersistenceContextInternal();
final EntityEntry entityEntry = persistenceContext.getEntry( entity );
if ( entityEntry == null ) {
throw new AssertionFailure( "possible non-threadsafe access to the session" );
}
initializeEntityEntryLoadedState( entity, entityEntry, session, entityResolver );
initializeEntityFromEntityEntryLoadedState( entity, entityEntry, readOnly, session, preLoadEvent, preLoadEventListeners );
initializeEntityFromEntityEntryLoadedState( entity, entityEntry, readOnly, session, preLoadEvent );
}

public static void initializeEntityEntryLoadedState(
Expand Down Expand Up @@ -261,8 +234,7 @@ public static void initializeEntityFromEntityEntryLoadedState(
final EntityEntry entityEntry,
final boolean readOnly,
final SharedSessionContractImplementor session,
final PreLoadEvent preLoadEvent,
final Iterable<PreLoadEventListener> preLoadEventListeners) throws HibernateException {
final PreLoadEvent preLoadEvent) throws HibernateException {

final PersistenceContext persistenceContext = session.getPersistenceContextInternal();
final EntityPersister persister = entityEntry.getPersister();
Expand All @@ -274,9 +246,8 @@ public static void initializeEntityFromEntityEntryLoadedState(
//Must occur after resolving identifiers!
if ( session.isEventSource() ) {
preLoadEvent.setEntity( entity ).setState( hydratedState ).setId( id ).setPersister( persister );
for ( PreLoadEventListener listener : preLoadEventListeners ) {
listener.onPreLoad( preLoadEvent );
}
session.getFactory().getFastSessionServices()
.eventListenerGroup_PRE_LOAD.fireEventOnEachListener( preLoadEvent, PreLoadEventListener::onPreLoad );
}

persister.setPropertyValues( entity, hydratedState );
Expand Down Expand Up @@ -589,7 +560,7 @@ public static void addUninitializedCachedEntity(
/**
* Implementations determine how a to-one associations is resolved.
*
* @see #initializeEntity(Object, boolean, SharedSessionContractImplementor, PreLoadEvent, Iterable, EntityResolver)
* @see #initializeEntity(Object, boolean, SharedSessionContractImplementor, PreLoadEvent, EntityResolver)
*/
public interface EntityResolver {

Expand Down
Expand Up @@ -1184,14 +1184,8 @@ private void initializeEntitiesAndCollections(
LOG.tracev( "Total objects hydrated: {0}", hydratedObjectsSize );

if ( hydratedObjectsSize != 0 ) {
final Iterable<PreLoadEventListener> listeners = session
.getFactory()
.getFastSessionServices()
.eventListenerGroup_PRE_LOAD
.listeners();

for ( Object hydratedObject : hydratedObjects ) {
TwoPhaseLoad.initializeEntity( hydratedObject, readOnly, session, pre, listeners );
TwoPhaseLoad.initializeEntity( hydratedObject, readOnly, session, pre );
}

}
Expand Down
Expand Up @@ -237,19 +237,13 @@ private void performTwoPhaseLoad(
}

final SharedSessionContractImplementor session = context.getSession();
final Iterable<PreLoadEventListener> listeners = session
.getFactory()
.getFastSessionServices()
.eventListenerGroup_PRE_LOAD
.listeners();

for ( HydratedEntityRegistration registration : hydratedEntityRegistrations ) {
TwoPhaseLoad.initializeEntity(
registration.getInstance(),
context.isReadOnly(),
session,
preLoadEvent,
listeners
preLoadEvent
);
}
}
Expand Down

0 comments on commit e6688f8

Please sign in to comment.