@@ -939,22 +939,22 @@ private void fireDelete(DeleteEvent event, Set transientEntities) {
939
939
public void load (Object object , Serializable id ) throws HibernateException {
940
940
LoadEvent event = loadEvent ;
941
941
loadEvent = null ;
942
- if ( event == null ) {
942
+ if ( event == null ) {
943
943
event = new LoadEvent ( id , object , this );
944
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 ());
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
951
}
952
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 );
953
+ if ( loadEvent == null ) {
954
+ event .setEntityClassName ( null );
955
+ event .setEntityId ( null );
956
+ event .setInstanceToLoad ( null );
957
+ event .setResult ( null );
958
958
loadEvent = event ;
959
959
}
960
960
}
@@ -992,23 +992,14 @@ public Object immediateLoad(String entityName, Serializable id) throws Hibernate
992
992
}
993
993
LoadEvent event = loadEvent ;
994
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
- }
995
+ event = recycleEventInstance ( event , id , entityName );
1005
996
fireLoad ( event , LoadEventListener .IMMEDIATE_LOAD );
1006
997
Object result = event .getResult ();
1007
- if ( loadEvent == null ) {
1008
- event .setEntityClassName (null );
1009
- event .setEntityId (null );
1010
- event .setInstanceToLoad (null );
1011
- event .setResult (null );
998
+ if ( loadEvent == null ) {
999
+ event .setEntityClassName ( null );
1000
+ event .setEntityId ( null );
1001
+ event .setInstanceToLoad ( null );
1002
+ event .setResult ( null );
1012
1003
loadEvent = event ;
1013
1004
}
1014
1005
return result ;
@@ -1026,31 +1017,40 @@ public Object internalLoad(String entityName, Serializable id, boolean eager, bo
1026
1017
1027
1018
LoadEvent event = loadEvent ;
1028
1019
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
- }
1020
+ event = recycleEventInstance ( event , id , entityName );
1039
1021
fireLoad ( event , type );
1040
1022
Object result = event .getResult ();
1041
1023
if ( !nullable ) {
1042
- UnresolvableObjectException .throwIfNull (result , id , entityName );
1024
+ UnresolvableObjectException .throwIfNull ( result , id , entityName );
1043
1025
}
1044
- if ( loadEvent == null ) {
1045
- event .setEntityClassName (null );
1046
- event .setEntityId (null );
1047
- event .setInstanceToLoad (null );
1048
- event .setResult (null );
1026
+ if ( loadEvent == null ) {
1027
+ event .setEntityClassName ( null );
1028
+ event .setEntityId ( null );
1029
+ event .setInstanceToLoad ( null );
1030
+ event .setResult ( null );
1049
1031
loadEvent = event ;
1050
1032
}
1051
1033
return result ;
1052
1034
}
1053
1035
1036
+ /**
1037
+ * Helper to avoid creating many new instances of LoadEvent: it's an allocation hot spot.
1038
+ */
1039
+ private LoadEvent recycleEventInstance (final LoadEvent event , final Serializable id , final String entityName ) {
1040
+ if ( event == null ) {
1041
+ return new LoadEvent ( id , entityName , true , this );
1042
+ }
1043
+ else {
1044
+ event .setEntityClassName ( entityName );
1045
+ event .setEntityId ( id );
1046
+ event .setInstanceToLoad ( null );
1047
+ event .setLockMode ( LoadEvent .DEFAULT_LOCK_MODE );
1048
+ event .setLockScope ( LoadEvent .DEFAULT_LOCK_OPTIONS .getScope () );
1049
+ event .setLockTimeout ( LoadEvent .DEFAULT_LOCK_OPTIONS .getTimeOut () );
1050
+ return event ;
1051
+ }
1052
+ }
1053
+
1054
1054
@ Override
1055
1055
public <T > T load (Class <T > entityClass , Serializable id , LockMode lockMode ) throws HibernateException {
1056
1056
return this .byId ( entityClass ).with ( new LockOptions ( lockMode ) ).getReference ( id );
0 commit comments