Skip to content

Commit 3ba92d7

Browse files
committed
Thread-safety NullPointerException fix for EntityEntryContext
1 parent e9dd160 commit 3ba92d7

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,11 @@ public void addEntityEntry(Object entity, EntityEntry entityEntry) {
152152
private ManagedEntity getAssociatedManagedEntity(Object entity) {
153153
if ( ManagedEntity.class.isInstance( entity ) ) {
154154
final ManagedEntity managedEntity = (ManagedEntity) entity;
155-
if ( managedEntity.$$_hibernate_getEntityEntry() == null ) {
155+
final AbstractEntityEntry entityEntry = (AbstractEntityEntry) managedEntity.$$_hibernate_getEntityEntry();
156+
if ( entityEntry == null ) {
156157
// it is not associated
157158
return null;
158159
}
159-
final AbstractEntityEntry entityEntry = (AbstractEntityEntry) managedEntity.$$_hibernate_getEntityEntry();
160160

161161
if ( entityEntry.getPersister().isMutable() ) {
162162
return entityEntry.getPersistenceContext() == persistenceContext
@@ -391,12 +391,14 @@ public void serialize(ObjectOutputStream oos) throws IOException {
391391
ManagedEntity managedEntity = head;
392392
while ( managedEntity != null ) {
393393
// so we know whether or not to build a ManagedEntityImpl on deserialize
394-
oos.writeBoolean( managedEntity == managedEntity.$$_hibernate_getEntityInstance() );
395-
oos.writeObject( managedEntity.$$_hibernate_getEntityInstance() );
394+
final Object instance = managedEntity.$$_hibernate_getEntityInstance();
395+
oos.writeBoolean( managedEntity == instance );
396+
oos.writeObject( instance );
396397
// we need to know which implementation of EntityEntry is being serialized
397-
oos.writeInt( managedEntity.$$_hibernate_getEntityEntry().getClass().getName().length() );
398-
oos.writeChars( managedEntity.$$_hibernate_getEntityEntry().getClass().getName() );
399-
managedEntity.$$_hibernate_getEntityEntry().serialize( oos );
398+
final EntityEntry entry = managedEntity.$$_hibernate_getEntityEntry();
399+
oos.writeInt( entry.getClass().getName().length() );
400+
oos.writeChars( entry.getClass().getName() );
401+
entry.serialize( oos );
400402

401403
managedEntity = managedEntity.$$_hibernate_getNextManagedEntity();
402404
}
@@ -633,16 +635,16 @@ public ImmutableManagedEntityHolder(ManagedEntity immutableManagedEntity) {
633635
/*
634636
Check instance type of EntityEntry and if type is ImmutableEntityEntry, check to see if entity is referenced cached in the second level cache
635637
*/
636-
private boolean canClearEntityEntryReference(){
637-
638-
if( managedEntity.$$_hibernate_getEntityEntry() == null ) {
638+
private boolean canClearEntityEntryReference() {
639+
final EntityEntry entry = managedEntity.$$_hibernate_getEntityEntry();
640+
if( entry == null ) {
639641
return true;
640642
}
641643

642-
if( !(managedEntity.$$_hibernate_getEntityEntry() instanceof ImmutableEntityEntry) ) {
644+
if( !(entry instanceof ImmutableEntityEntry) ) {
643645
return true;
644646
}
645-
else if( managedEntity.$$_hibernate_getEntityEntry().getPersister().canUseReferenceCacheEntries() ) {
647+
else if( entry.getPersister().canUseReferenceCacheEntries() ) {
646648
return false;
647649
}
648650

0 commit comments

Comments
 (0)