@@ -205,6 +205,7 @@ public final class SessionImpl extends AbstractSessionImpl implements EventSourc
205
205
private transient ExceptionMapper exceptionMapper ;
206
206
private transient ManagedFlushChecker managedFlushChecker ;
207
207
private transient AfterCompletionAction afterCompletionAction ;
208
+ private transient LoadEvent loadEvent ; //cached LoadEvent instance
208
209
209
210
/**
210
211
* Constructor used for openSession(...) processing, as well as construction
@@ -936,8 +937,26 @@ private void fireDelete(DeleteEvent event, Set transientEntities) {
936
937
937
938
@ Override
938
939
public void load (Object object , Serializable id ) throws HibernateException {
939
- LoadEvent event = new LoadEvent ( id , object , this );
940
+ LoadEvent event = loadEvent ;
941
+ loadEvent = null ;
942
+ if (event == null ) {
943
+ event = new LoadEvent ( id , object , this );
944
+ } else {
945
+ event .setEntityClassName (null );
946
+ event .setEntityId (id );
947
+ event .setInstanceToLoad (object );
948
+ event .setLockMode (LoadEvent .DEFAULT_LOCK_MODE );
949
+ event .setLockScope (LoadEvent .DEFAULT_LOCK_OPTIONS .getScope ());
950
+ event .setLockTimeout (LoadEvent .DEFAULT_LOCK_OPTIONS .getTimeOut ());
951
+ }
940
952
fireLoad ( event , LoadEventListener .RELOAD );
953
+ if (loadEvent == null ) {
954
+ event .setEntityClassName (null );
955
+ event .setEntityId (null );
956
+ event .setInstanceToLoad (null );
957
+ event .setResult (null );
958
+ loadEvent = event ;
959
+ }
941
960
}
942
961
943
962
@ Override
@@ -971,10 +990,28 @@ public Object immediateLoad(String entityName, Serializable id) throws Hibernate
971
990
EntityPersister persister = getFactory ().getEntityPersister ( entityName );
972
991
LOG .debugf ( "Initializing proxy: %s" , MessageHelper .infoString ( persister , id , getFactory () ) );
973
992
}
974
-
975
- LoadEvent event = new LoadEvent ( id , entityName , true , this );
993
+ LoadEvent event = loadEvent ;
994
+ loadEvent = null ;
995
+ if (event == null ) {
996
+ event = new LoadEvent ( id , entityName , true , this );
997
+ } else {
998
+ event .setEntityClassName (entityName );
999
+ event .setEntityId (id );
1000
+ event .setInstanceToLoad (null );
1001
+ event .setLockMode (LoadEvent .DEFAULT_LOCK_MODE );
1002
+ event .setLockScope (LoadEvent .DEFAULT_LOCK_OPTIONS .getScope ());
1003
+ event .setLockTimeout (LoadEvent .DEFAULT_LOCK_OPTIONS .getTimeOut ());
1004
+ }
976
1005
fireLoad ( event , LoadEventListener .IMMEDIATE_LOAD );
977
- return event .getResult ();
1006
+ Object result = event .getResult ();
1007
+ if (loadEvent == null ) {
1008
+ event .setEntityClassName (null );
1009
+ event .setEntityId (null );
1010
+ event .setInstanceToLoad (null );
1011
+ event .setResult (null );
1012
+ loadEvent = event ;
1013
+ }
1014
+ return result ;
978
1015
}
979
1016
980
1017
@ Override
@@ -986,12 +1023,32 @@ public Object internalLoad(String entityName, Serializable id, boolean eager, bo
986
1023
: eager
987
1024
? LoadEventListener .INTERNAL_LOAD_EAGER
988
1025
: LoadEventListener .INTERNAL_LOAD_LAZY ;
989
- LoadEvent event = new LoadEvent ( id , entityName , true , this );
1026
+
1027
+ LoadEvent event = loadEvent ;
1028
+ loadEvent = null ;
1029
+ if (event == null ) {
1030
+ event = new LoadEvent ( id , entityName , true , this );
1031
+ } else {
1032
+ event .setEntityClassName (entityName );
1033
+ event .setEntityId (id );
1034
+ event .setInstanceToLoad (null );
1035
+ event .setLockMode (LoadEvent .DEFAULT_LOCK_MODE );
1036
+ event .setLockScope (LoadEvent .DEFAULT_LOCK_OPTIONS .getScope ());
1037
+ event .setLockTimeout (LoadEvent .DEFAULT_LOCK_OPTIONS .getTimeOut ());
1038
+ }
990
1039
fireLoad ( event , type );
1040
+ Object result = event .getResult ();
991
1041
if ( !nullable ) {
992
- UnresolvableObjectException .throwIfNull ( event . getResult () , id , entityName );
1042
+ UnresolvableObjectException .throwIfNull (result , id , entityName );
993
1043
}
994
- return event .getResult ();
1044
+ if (loadEvent == null ) {
1045
+ event .setEntityClassName (null );
1046
+ event .setEntityId (null );
1047
+ event .setInstanceToLoad (null );
1048
+ event .setResult (null );
1049
+ loadEvent = event ;
1050
+ }
1051
+ return result ;
995
1052
}
996
1053
997
1054
@ Override
0 commit comments