88
99import  org .hibernate .AssertionFailure ;
1010import  org .hibernate .HibernateException ;
11+ import  org .hibernate .Interceptor ;
1112import  org .hibernate .ObjectDeletedException ;
1213import  org .hibernate .StaleObjectStateException ;
1314import  org .hibernate .WrongClassException ;
@@ -282,6 +283,7 @@ protected void entityIsTransient(MergeEvent event, Object id, MergeContext copyC
282283
283284		final  Object  entity  = event .getEntity ();
284285		final  EventSource  session  = event .getSession ();
286+ 		final  Interceptor  interceptor  = session .getInterceptor ();
285287		final  String  entityName  = event .getEntityName ();
286288		final  EntityPersister  persister  = session .getEntityPersister ( entityName , entity  );
287289		final  String [] propertyNames  = persister .getPropertyNames ();
@@ -294,7 +296,7 @@ protected void entityIsTransient(MergeEvent event, Object id, MergeContext copyC
294296		super .cascadeBeforeSave ( session , persister , entity , copyCache  );
295297
296298		final  Object [] sourceValues  = persister .getValues ( entity  );
297- 		session . getInterceptor () .preMerge ( entity , sourceValues , propertyNames , propertyTypes  );
299+ 		interceptor .preMerge ( entity , sourceValues , propertyNames , propertyTypes  );
298300		final  Object [] copiedValues  = TypeHelper .replace (
299301				sourceValues ,
300302				persister .getValues ( copy  ),
@@ -326,7 +328,7 @@ protected void entityIsTransient(MergeEvent event, Object id, MergeContext copyC
326328				ForeignKeyDirection .TO_PARENT 
327329		);
328330		persister .setValues ( copy , targetValues  );
329- 		session . getInterceptor (). postMerge ( entity , copy , targetValues , null , propertyNames , propertyTypes  );
331+ 		interceptor . postMerge ( entity , copy ,  id , targetValues , null , propertyNames , propertyTypes  );
330332
331333		// saveTransientEntity has been called using a copy that contains empty collections 
332334		// (copyValues uses ForeignKeyDirection.FROM_PARENT) then the PC may contain a wrong 
@@ -341,9 +343,9 @@ protected void entityIsTransient(MergeEvent event, Object id, MergeContext copyC
341343		event .setResult ( copy  );
342344
343345		if  ( isPersistentAttributeInterceptable ( copy  ) ) {
344- 			final  PersistentAttributeInterceptor  interceptor  =
346+ 			final  PersistentAttributeInterceptor  attributeInterceptor  =
345347					asPersistentAttributeInterceptable ( copy  ).$$_hibernate_getInterceptor ();
346- 			if  ( interceptor  == null  ) {
348+ 			if  ( attributeInterceptor  == null  ) {
347349				persister .getBytecodeEnhancementMetadata ().injectInterceptor ( copy , id , session  );
348350			}
349351		}
@@ -453,12 +455,13 @@ protected void entityIsDetached(MergeEvent event, Object copiedId, Object origin
453455			// copy created before we actually copy 
454456			cascadeOnMerge ( session , persister , entity , copyCache  );
455457
458+ 			final  Interceptor  interceptor  = session .getInterceptor ();
456459			final  String [] propertyNames  = persister .getPropertyNames ();
457460			final  Type [] propertyTypes  = persister .getPropertyTypes ();
458461
459462			final  Object [] sourceValues  = persister .getValues ( entity  );
460463			final  Object [] originalValues  = persister .getValues ( target  );
461- 			session . getInterceptor () .preMerge ( entity , sourceValues , propertyNames , propertyTypes  );
464+ 			interceptor .preMerge ( entity , sourceValues , propertyNames , propertyTypes  );
462465			final  Object [] targetValues  = TypeHelper .replace (
463466					sourceValues ,
464467					originalValues ,
@@ -468,7 +471,7 @@ protected void entityIsDetached(MergeEvent event, Object copiedId, Object origin
468471					copyCache 
469472			);
470473			persister .setValues ( target , targetValues  );
471- 			session . getInterceptor (). postMerge ( entity , target , targetValues , originalValues , propertyNames , propertyTypes  );
474+ 			interceptor . postMerge ( entity , target ,  id , targetValues , originalValues , propertyNames , propertyTypes  );
472475			//copyValues works by reflection, so explicitly mark the entity instance dirty 
473476			markInterceptorDirty ( entity , target  );
474477			event .setResult ( result  );
0 commit comments