@@ -64,21 +64,39 @@ public void onRefresh(RefreshEvent event, RefreshContext refreshedAlready) {
64
64
final Object object = event .getObject ();
65
65
if ( persistenceContext .reassociateIfUninitializedProxy ( object ) ) {
66
66
final boolean isTransient = isTransient ( event , source , object );
67
+ // If refreshAlready is not empty then the refresh is the result of a
68
+ // cascade refresh and the refresh of the parent will take care of initializing the lazy
69
+ // entity and setting the correct lock on it, this is needed only when the refresh is called directly on a lazy entity
70
+ if ( refreshedAlready .isEmpty () ) {
71
+ final LazyInitializer lazyInitializer = HibernateProxy .extractLazyInitializer ( object );
72
+ final EntityPersister persister ;
73
+ if ( lazyInitializer != null ) {
74
+ persister = source .getEntityPersister ( lazyInitializer .getEntityName (), object );
75
+ }
76
+ else if ( !isTransient ) {
77
+ final EntityEntry entry = persistenceContext .getEntry ( object );
78
+ persister = entry .getPersister ();
79
+ }
80
+ else {
81
+ persister = source .getEntityPersister ( source .guessEntityName ( object ), object );
82
+ }
67
83
68
- final LazyInitializer lazyInitializer = HibernateProxy .extractLazyInitializer ( object );
69
- final EntityPersister persister = source .getEntityPersister ( lazyInitializer .getEntityName (), object );
70
- refresh (
71
- event ,
72
- null ,
73
- source ,
74
- persister ,
75
- lazyInitializer ,
76
- null ,
77
- persister .getIdentifier ( object , event .getSession () ),
78
- persistenceContext
79
- );
84
+ refresh (
85
+ event ,
86
+ null ,
87
+ source ,
88
+ persister ,
89
+ lazyInitializer ,
90
+ null ,
91
+ persister .getIdentifier ( object , event .getSession () ),
92
+ persistenceContext
93
+ );
94
+ if ( lazyInitializer != null ) {
95
+ refreshedAlready .add ( lazyInitializer .getImplementation () );
96
+ }
97
+ }
80
98
81
- if ( isTransient ) {
99
+ if ( isTransient ) {
82
100
source .setReadOnly ( object , source .isDefaultReadOnly () );
83
101
}
84
102
}
0 commit comments