HHH-15787 DefaultMergeEventlistener#onMerge is performing runtime services lookup
This commit is contained in:
parent
329ccaa7a1
commit
ed26c3f8fa
|
@ -28,7 +28,6 @@ import org.hibernate.engine.spi.SelfDirtinessTracker;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
import org.hibernate.engine.spi.SessionImplementor;
|
import org.hibernate.engine.spi.SessionImplementor;
|
||||||
import org.hibernate.event.spi.EntityCopyObserver;
|
import org.hibernate.event.spi.EntityCopyObserver;
|
||||||
import org.hibernate.event.spi.EntityCopyObserverFactory;
|
|
||||||
import org.hibernate.event.spi.EventSource;
|
import org.hibernate.event.spi.EventSource;
|
||||||
import org.hibernate.event.spi.MergeContext;
|
import org.hibernate.event.spi.MergeContext;
|
||||||
import org.hibernate.event.spi.MergeEvent;
|
import org.hibernate.event.spi.MergeEvent;
|
||||||
|
@ -75,11 +74,12 @@ public class DefaultMergeEventListener
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void onMerge(MergeEvent event) throws HibernateException {
|
public void onMerge(MergeEvent event) throws HibernateException {
|
||||||
final EntityCopyObserver entityCopyObserver = createEntityCopyObserver( event.getSession().getFactory() );
|
final EventSource session = event.getSession();
|
||||||
final MergeContext mergeContext = new MergeContext( event.getSession(), entityCopyObserver );
|
final EntityCopyObserver entityCopyObserver = createEntityCopyObserver( session );
|
||||||
|
final MergeContext mergeContext = new MergeContext( session, entityCopyObserver );
|
||||||
try {
|
try {
|
||||||
onMerge( event, mergeContext );
|
onMerge( event, mergeContext );
|
||||||
entityCopyObserver.topLevelMergeComplete( event.getSession() );
|
entityCopyObserver.topLevelMergeComplete( session );
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
entityCopyObserver.clear();
|
entityCopyObserver.clear();
|
||||||
|
@ -87,10 +87,8 @@ public class DefaultMergeEventListener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private EntityCopyObserver createEntityCopyObserver(SessionFactoryImplementor sessionFactory) {
|
private EntityCopyObserver createEntityCopyObserver(final EventSource session) {
|
||||||
return sessionFactory.getServiceRegistry()
|
return session.getFactory().getFastSessionServices().entityCopyObserverFactory.createEntityCopyObserver();
|
||||||
.getService( EntityCopyObserverFactory.class )
|
|
||||||
.createEntityCopyObserver();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.hibernate.event.spi.AutoFlushEventListener;
|
||||||
import org.hibernate.event.spi.ClearEventListener;
|
import org.hibernate.event.spi.ClearEventListener;
|
||||||
import org.hibernate.event.spi.DeleteEventListener;
|
import org.hibernate.event.spi.DeleteEventListener;
|
||||||
import org.hibernate.event.spi.DirtyCheckEventListener;
|
import org.hibernate.event.spi.DirtyCheckEventListener;
|
||||||
|
import org.hibernate.event.spi.EntityCopyObserverFactory;
|
||||||
import org.hibernate.event.spi.EventType;
|
import org.hibernate.event.spi.EventType;
|
||||||
import org.hibernate.event.spi.EvictEventListener;
|
import org.hibernate.event.spi.EvictEventListener;
|
||||||
import org.hibernate.event.spi.FlushEntityEventListener;
|
import org.hibernate.event.spi.FlushEntityEventListener;
|
||||||
|
@ -164,6 +165,9 @@ public final class FastSessionServices {
|
||||||
final LockOptions defaultLockOptions;
|
final LockOptions defaultLockOptions;
|
||||||
final int defaultJdbcBatchSize;
|
final int defaultJdbcBatchSize;
|
||||||
|
|
||||||
|
//This one needs to be public unfortunately:
|
||||||
|
public final EntityCopyObserverFactory entityCopyObserverFactory;
|
||||||
|
|
||||||
//Private fields:
|
//Private fields:
|
||||||
private final Dialect dialect;
|
private final Dialect dialect;
|
||||||
private final CacheStoreMode defaultCacheStoreMode;
|
private final CacheStoreMode defaultCacheStoreMode;
|
||||||
|
@ -232,6 +236,7 @@ public final class FastSessionServices {
|
||||||
this.classLoaderService = sr.getService( ClassLoaderService.class );
|
this.classLoaderService = sr.getService( ClassLoaderService.class );
|
||||||
this.transactionCoordinatorBuilder = sr.getService( TransactionCoordinatorBuilder.class );
|
this.transactionCoordinatorBuilder = sr.getService( TransactionCoordinatorBuilder.class );
|
||||||
this.jdbcServices = sr.getService( JdbcServices.class );
|
this.jdbcServices = sr.getService( JdbcServices.class );
|
||||||
|
this.entityCopyObserverFactory = sr.getService( EntityCopyObserverFactory.class );
|
||||||
|
|
||||||
this.isJtaTransactionAccessible = isTransactionAccessible( sf, transactionCoordinatorBuilder );
|
this.isJtaTransactionAccessible = isTransactionAccessible( sf, transactionCoordinatorBuilder );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue