Skip to content

Commit 062b7ed

Browse files
committed
HHH-19955 Fix for NullpointerException in EntityEntryContext in some multi-threaded scenarios
1 parent 7c61e20 commit 062b7ed

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

hibernate-core/src/main/java/org/hibernate/engine/internal/EntityEntryContext.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,13 @@ private static boolean isReferenceCachingEnabled(EntityPersister persister) {
161161
private ManagedEntity getAssociatedManagedEntity(Object entity) {
162162
if ( isManagedEntity( entity ) ) {
163163
final var managedEntity = asManagedEntity( entity );
164-
if ( managedEntity.$$_hibernate_getEntityEntry() == null ) {
165-
// it is not associated
166-
return null;
167-
}
168164
final var entityEntry =
169165
(EntityEntryImpl)
170166
managedEntity.$$_hibernate_getEntityEntry();
171-
167+
if ( entityEntry == null ) {
168+
// it is not associated
169+
return null;
170+
}
172171
if ( entityEntry.getPersister().isMutable() ) {
173172
return entityEntry.getPersistenceContext() == persistenceContext
174173
? managedEntity // it is associated
@@ -449,12 +448,14 @@ public void serialize(ObjectOutputStream oos) throws IOException {
449448
var managedEntity = head;
450449
while ( managedEntity != null ) {
451450
// so we know whether or not to build a ManagedEntityImpl on deserialize
452-
oos.writeBoolean( managedEntity == managedEntity.$$_hibernate_getEntityInstance() );
453-
oos.writeObject( managedEntity.$$_hibernate_getEntityInstance() );
451+
final var instance = managedEntity.$$_hibernate_getEntityInstance();
452+
oos.writeBoolean( managedEntity == instance );
453+
oos.writeObject( instance );
454454
// we need to know which implementation of EntityEntry is being serialized
455-
oos.writeInt( managedEntity.$$_hibernate_getEntityEntry().getClass().getName().length() );
456-
oos.writeChars( managedEntity.$$_hibernate_getEntityEntry().getClass().getName() );
457-
managedEntity.$$_hibernate_getEntityEntry().serialize( oos );
455+
final var entry = managedEntity.$$_hibernate_getEntityEntry();
456+
oos.writeInt( entry.getClass().getName().length() );
457+
oos.writeChars( entry.getClass().getName() );
458+
entry.serialize( oos );
458459
managedEntity = managedEntity.$$_hibernate_getNextManagedEntity();
459460
}
460461
}

0 commit comments

Comments
 (0)