HHH-6974 - Add caching to new "load access" api for natural id loading
This commit is contained in:
parent
bbac2fd220
commit
b0ba04d09b
|
@ -1600,7 +1600,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
rtn.entityEntries = IdentityMap.instantiateSequenced( count < INIT_COLL_SIZE ? INIT_COLL_SIZE : count );
|
rtn.entityEntries = IdentityMap.instantiateSequenced( count < INIT_COLL_SIZE ? INIT_COLL_SIZE : count );
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
Object entity = ois.readObject();
|
Object entity = ois.readObject();
|
||||||
EntityEntry entry = EntityEntry.deserialize( ois, session );
|
EntityEntry entry = EntityEntry.deserialize( ois, rtn );
|
||||||
rtn.entityEntries.put( entity, entry );
|
rtn.entityEntries.put( entity, entry );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1766,6 +1766,10 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
this.persister = persister;
|
this.persister = persister;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EntityPersister getPersister() {
|
||||||
|
return persister;
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Serializable,NaturalId> pkToNaturalIdMap = new ConcurrentHashMap<Serializable, NaturalId>();
|
private Map<Serializable,NaturalId> pkToNaturalIdMap = new ConcurrentHashMap<Serializable, NaturalId>();
|
||||||
private Map<NaturalId,Serializable> naturalIdToPkMap = new ConcurrentHashMap<NaturalId,Serializable>();
|
private Map<NaturalId,Serializable> naturalIdToPkMap = new ConcurrentHashMap<NaturalId,Serializable>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -338,7 +338,7 @@ public final class EntityEntry implements Serializable {
|
||||||
|
|
||||||
private void notifyLoadedStateUpdated() {
|
private void notifyLoadedStateUpdated() {
|
||||||
if ( persistenceContext == null ) {
|
if ( persistenceContext == null ) {
|
||||||
throw new HibernateException( "PersistenceContext was null on an empty to update loaded state; indicates mis-use of EntityEntry as non-flushed change handling" );
|
throw new HibernateException( "PersistenceContext was null on attempt to update loaded state" );
|
||||||
}
|
}
|
||||||
|
|
||||||
persistenceContext.loadedStateUpdatedNotification( this );
|
persistenceContext.loadedStateUpdatedNotification( this );
|
||||||
|
@ -374,7 +374,7 @@ public final class EntityEntry implements Serializable {
|
||||||
* Session/PersistenceContext for increased performance.
|
* Session/PersistenceContext for increased performance.
|
||||||
*
|
*
|
||||||
* @param ois The stream from which to read the entry.
|
* @param ois The stream from which to read the entry.
|
||||||
* @param session The session being deserialized.
|
* @param persistenceContext The context being deserialized.
|
||||||
*
|
*
|
||||||
* @return The deserialized EntityEntry
|
* @return The deserialized EntityEntry
|
||||||
*
|
*
|
||||||
|
@ -384,10 +384,11 @@ public final class EntityEntry implements Serializable {
|
||||||
*/
|
*/
|
||||||
public static EntityEntry deserialize(
|
public static EntityEntry deserialize(
|
||||||
ObjectInputStream ois,
|
ObjectInputStream ois,
|
||||||
SessionImplementor session) throws IOException, ClassNotFoundException {
|
PersistenceContext persistenceContext) throws IOException, ClassNotFoundException {
|
||||||
String previousStatusString = null;
|
String previousStatusString;
|
||||||
return new EntityEntry(
|
return new EntityEntry(
|
||||||
( session == null ? null : session.getFactory() ),
|
// this complexity comes from non-flushed changes, should really look at how that reattaches entries
|
||||||
|
( persistenceContext.getSession() == null ? null : persistenceContext.getSession().getFactory() ),
|
||||||
(String) ois.readObject(),
|
(String) ois.readObject(),
|
||||||
( Serializable ) ois.readObject(),
|
( Serializable ) ois.readObject(),
|
||||||
EntityMode.parse( (String) ois.readObject() ),
|
EntityMode.parse( (String) ois.readObject() ),
|
||||||
|
@ -404,7 +405,7 @@ public final class EntityEntry implements Serializable {
|
||||||
ois.readBoolean(),
|
ois.readBoolean(),
|
||||||
ois.readBoolean(),
|
ois.readBoolean(),
|
||||||
ois.readBoolean(),
|
ois.readBoolean(),
|
||||||
( session == null ? null : session.getPersistenceContext() ) // ugh, need to redo how this particular bit works for non-flushed changes
|
persistenceContext
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue