Skip to content

Commit 3a515b5

Browse files
johnaoharasebersole
authored andcommitted
HHH-9857 - Reuse of EntityEntry for bytecode enhanced read-only reference cached entities
1 parent d29b55a commit 3a515b5

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.hibernate.engine.spi.EntityEntryFactory;
4545
import org.hibernate.engine.spi.EntityKey;
4646
import org.hibernate.engine.spi.EntityUniqueKey;
47+
import org.hibernate.engine.spi.ManagedEntity;
4748
import org.hibernate.engine.spi.PersistenceContext;
4849
import org.hibernate.engine.spi.SessionFactoryImplementor;
4950
import org.hibernate.engine.spi.SessionImplementor;
@@ -472,20 +473,28 @@ public EntityEntry addEntry(
472473
final boolean disableVersionIncrement,
473474
boolean lazyPropertiesAreUnfetched) {
474475

475-
final EntityEntryFactory entityEntryFactory = persister.getEntityEntryFactory();
476-
final EntityEntry e = entityEntryFactory.createEntityEntry(
477-
status,
478-
loadedState,
479-
rowId,
480-
id,
481-
version,
482-
lockMode,
483-
existsInDatabase,
484-
persister,
485-
disableVersionIncrement,
486-
lazyPropertiesAreUnfetched,
487-
this
488-
);
476+
final EntityEntry e;
477+
478+
if( (entity instanceof ManagedEntity) && ((ManagedEntity) entity).$$_hibernate_getEntityEntry() != null && status == Status.READ_ONLY) {
479+
e = ((ManagedEntity) entity).$$_hibernate_getEntityEntry();
480+
e.setStatus( status );
481+
}
482+
else {
483+
final EntityEntryFactory entityEntryFactory = persister.getEntityEntryFactory();
484+
e = entityEntryFactory.createEntityEntry(
485+
status,
486+
loadedState,
487+
rowId,
488+
id,
489+
version,
490+
lockMode,
491+
existsInDatabase,
492+
persister,
493+
disableVersionIncrement,
494+
lazyPropertiesAreUnfetched,
495+
this
496+
);
497+
}
489498

490499
entityEntryContext.addEntityEntry( entity, e );
491500
// entityEntries.put(entity, e);

0 commit comments

Comments
 (0)