Skip to content

Commit 740c1a1

Browse files
committed
Null safety fixes in EntityEntryContext
1 parent 6027a68 commit 740c1a1

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.lang.reflect.InvocationTargetException;
2121
import java.util.IdentityHashMap;
2222
import java.util.Map;
23+
import java.util.Objects;
2324
import java.util.function.Consumer;
2425

2526
import static org.hibernate.engine.internal.ManagedTypeHelper.asManagedEntity;
@@ -161,14 +162,13 @@ private static boolean isReferenceCachingEnabled(EntityPersister persister) {
161162
private ManagedEntity getAssociatedManagedEntity(Object entity) {
162163
if ( isManagedEntity( entity ) ) {
163164
final var managedEntity = asManagedEntity( entity );
164-
if ( managedEntity.$$_hibernate_getEntityEntry() == null ) {
165-
// it is not associated
166-
return null;
167-
}
168165
final var entityEntry =
169166
(EntityEntryImpl)
170167
managedEntity.$$_hibernate_getEntityEntry();
171-
168+
if ( entityEntry == null ) {
169+
// it is not associated
170+
return null;
171+
}
172172
if ( entityEntry.getPersister().isMutable() ) {
173173
return entityEntry.getPersistenceContext() == persistenceContext
174174
? managedEntity // it is associated
@@ -313,7 +313,8 @@ public EntityEntry removeEntityEntry(Object entity) {
313313
private void removeXref(Object entity, ManagedEntity managedEntity) {
314314
if ( managedEntity instanceof ImmutableManagedEntityHolder holder ) {
315315
assert entity == holder.managedEntity;
316-
if ( !isReferenceCachingEnabled( holder.$$_hibernate_getEntityEntry().getPersister() ) ) {
316+
final var entry = holder.$$_hibernate_getEntityEntry();
317+
if ( entry != null && !isReferenceCachingEnabled( entry.getPersister() ) ) {
317318
immutableManagedEntityXref.remove( managedEntity.$$_hibernate_getInstanceId(), entity );
318319
}
319320
else {
@@ -449,13 +450,14 @@ public void serialize(ObjectOutputStream oos) throws IOException {
449450
var managedEntity = head;
450451
while ( managedEntity != null ) {
451452
// so we know whether or not to build a ManagedEntityImpl on deserialize
452-
final Object instance = managedEntity.$$_hibernate_getEntityInstance();
453+
final var instance = managedEntity.$$_hibernate_getEntityInstance();
453454
oos.writeBoolean( managedEntity == instance );
454455
oos.writeObject( instance );
455456
// we need to know which implementation of EntityEntry is being serialized
456-
oos.writeInt( managedEntity.$$_hibernate_getEntityEntry().getClass().getName().length() );
457-
oos.writeChars( managedEntity.$$_hibernate_getEntityEntry().getClass().getName() );
458-
managedEntity.$$_hibernate_getEntityEntry().serialize( oos );
457+
final var entry = Objects.requireNonNull(managedEntity.$$_hibernate_getEntityEntry());
458+
oos.writeInt( entry.getClass().getName().length() );
459+
oos.writeChars( entry.getClass().getName() );
460+
entry.serialize( oos );
459461
managedEntity = managedEntity.$$_hibernate_getNextManagedEntity();
460462
}
461463
}
@@ -722,6 +724,9 @@ public ImmutableManagedEntityHolder(ManagedEntity immutableManagedEntity) {
722724
// Check instance type of EntityEntry and if type is ImmutableEntityEntry,
723725
// check to see if entity is referenced cached in the second level cache
724726
private static boolean canClearEntityEntryReference(EntityEntry entityEntry) {
727+
if (entityEntry == null) {
728+
return false;
729+
}
725730
final EntityPersister persister = entityEntry.getPersister();
726731
return persister.isMutable() || !isReferenceCachingEnabled( persister );
727732
}

0 commit comments

Comments
 (0)