|
44 | 44 | import org.hibernate.engine.spi.EntityEntryFactory;
|
45 | 45 | import org.hibernate.engine.spi.EntityKey;
|
46 | 46 | import org.hibernate.engine.spi.EntityUniqueKey;
|
| 47 | +import org.hibernate.engine.spi.ManagedEntity; |
47 | 48 | import org.hibernate.engine.spi.PersistenceContext;
|
48 | 49 | import org.hibernate.engine.spi.SessionFactoryImplementor;
|
49 | 50 | import org.hibernate.engine.spi.SessionImplementor;
|
@@ -472,20 +473,28 @@ public EntityEntry addEntry(
|
472 | 473 | final boolean disableVersionIncrement,
|
473 | 474 | boolean lazyPropertiesAreUnfetched) {
|
474 | 475 |
|
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 | + } |
489 | 498 |
|
490 | 499 | entityEntryContext.addEntityEntry( entity, e );
|
491 | 500 | // entityEntries.put(entity, e);
|
|
0 commit comments