Skip to content

Commit ed26c3f

Browse files
committed
HHH-15787 DefaultMergeEventlistener#onMerge is performing runtime services lookup
1 parent 329ccaa commit ed26c3f

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

hibernate-core/src/main/java/org/hibernate/event/internal/DefaultMergeEventListener.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.hibernate.engine.spi.SessionFactoryImplementor;
2929
import org.hibernate.engine.spi.SessionImplementor;
3030
import org.hibernate.event.spi.EntityCopyObserver;
31-
import org.hibernate.event.spi.EntityCopyObserverFactory;
3231
import org.hibernate.event.spi.EventSource;
3332
import org.hibernate.event.spi.MergeContext;
3433
import org.hibernate.event.spi.MergeEvent;
@@ -75,22 +74,21 @@ protected Map<Object,Object> getMergeMap(MergeContext context) {
7574
*
7675
*/
7776
public void onMerge(MergeEvent event) throws HibernateException {
78-
final EntityCopyObserver entityCopyObserver = createEntityCopyObserver( event.getSession().getFactory() );
79-
final MergeContext mergeContext = new MergeContext( event.getSession(), entityCopyObserver );
77+
final EventSource session = event.getSession();
78+
final EntityCopyObserver entityCopyObserver = createEntityCopyObserver( session );
79+
final MergeContext mergeContext = new MergeContext( session, entityCopyObserver );
8080
try {
8181
onMerge( event, mergeContext );
82-
entityCopyObserver.topLevelMergeComplete( event.getSession() );
82+
entityCopyObserver.topLevelMergeComplete( session );
8383
}
8484
finally {
8585
entityCopyObserver.clear();
8686
mergeContext.clear();
8787
}
8888
}
8989

90-
private EntityCopyObserver createEntityCopyObserver(SessionFactoryImplementor sessionFactory) {
91-
return sessionFactory.getServiceRegistry()
92-
.getService( EntityCopyObserverFactory.class )
93-
.createEntityCopyObserver();
90+
private EntityCopyObserver createEntityCopyObserver(final EventSource session) {
91+
return session.getFactory().getFastSessionServices().entityCopyObserverFactory.createEntityCopyObserver();
9492
}
9593

9694
/**

hibernate-core/src/main/java/org/hibernate/internal/FastSessionServices.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.hibernate.event.spi.ClearEventListener;
3434
import org.hibernate.event.spi.DeleteEventListener;
3535
import org.hibernate.event.spi.DirtyCheckEventListener;
36+
import org.hibernate.event.spi.EntityCopyObserverFactory;
3637
import org.hibernate.event.spi.EventType;
3738
import org.hibernate.event.spi.EvictEventListener;
3839
import org.hibernate.event.spi.FlushEntityEventListener;
@@ -164,6 +165,9 @@ public final class FastSessionServices {
164165
final LockOptions defaultLockOptions;
165166
final int defaultJdbcBatchSize;
166167

168+
//This one needs to be public unfortunately:
169+
public final EntityCopyObserverFactory entityCopyObserverFactory;
170+
167171
//Private fields:
168172
private final Dialect dialect;
169173
private final CacheStoreMode defaultCacheStoreMode;
@@ -232,6 +236,7 @@ public final class FastSessionServices {
232236
this.classLoaderService = sr.getService( ClassLoaderService.class );
233237
this.transactionCoordinatorBuilder = sr.getService( TransactionCoordinatorBuilder.class );
234238
this.jdbcServices = sr.getService( JdbcServices.class );
239+
this.entityCopyObserverFactory = sr.getService( EntityCopyObserverFactory.class );
235240

236241
this.isJtaTransactionAccessible = isTransactionAccessible( sf, transactionCoordinatorBuilder );
237242

0 commit comments

Comments
 (0)