mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-10 05:04:52 +00:00
HHH-13654 Reorganize fields and add some comments about this work
This commit is contained in:
parent
f89bf35106
commit
2bcb1b0a6d
@ -92,31 +92,42 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
|||||||
|
|
||||||
private static final int INIT_COLL_SIZE = 8;
|
private static final int INIT_COLL_SIZE = 8;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Eagerly Initialized Fields
|
||||||
|
the following fields are used in all circumstances, and are not worth (or not suited) to being converted into lazy
|
||||||
|
*/
|
||||||
private SharedSessionContractImplementor session;
|
private SharedSessionContractImplementor session;
|
||||||
|
private EntityEntryContext entityEntryContext;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Everything else below should be carefully initialized only on first need;
|
||||||
|
this optimisation is very effective as null checks are free, while allocation costs
|
||||||
|
are very often the dominating cost of an application using ORM.
|
||||||
|
This is not general advice, but it's worth the added maintenance burden in this case
|
||||||
|
as this is a very central component of our library.
|
||||||
|
*/
|
||||||
|
|
||||||
// Loaded entity instances, by EntityKey
|
// Loaded entity instances, by EntityKey
|
||||||
private HashMap<EntityKey, Object> entitiesByKey;
|
private HashMap<EntityKey, Object> entitiesByKey;
|
||||||
|
|
||||||
// Loaded entity instances, by EntityUniqueKey
|
// Loaded entity instances, by EntityUniqueKey
|
||||||
private Map<EntityUniqueKey, Object> entitiesByUniqueKey;
|
private HashMap<EntityUniqueKey, Object> entitiesByUniqueKey;
|
||||||
|
|
||||||
private EntityEntryContext entityEntryContext;
|
|
||||||
|
|
||||||
// Entity proxies, by EntityKey
|
// Entity proxies, by EntityKey
|
||||||
private ConcurrentMap<EntityKey, Object> proxiesByKey;
|
private ConcurrentReferenceHashMap<EntityKey, Object> proxiesByKey;
|
||||||
|
|
||||||
// Snapshots of current database state for entities
|
// Snapshots of current database state for entities
|
||||||
// that have *not* been loaded
|
// that have *not* been loaded
|
||||||
private Map<EntityKey, Object> entitySnapshotsByKey;
|
private HashMap<EntityKey, Object> entitySnapshotsByKey;
|
||||||
|
|
||||||
// Identity map of array holder ArrayHolder instances, by the array instance
|
// Identity map of array holder ArrayHolder instances, by the array instance
|
||||||
private Map<Object, PersistentCollection> arrayHolders;
|
private IdentityHashMap<Object, PersistentCollection> arrayHolders;
|
||||||
|
|
||||||
// Identity map of CollectionEntry instances, by the collection wrapper
|
// Identity map of CollectionEntry instances, by the collection wrapper
|
||||||
private IdentityMap<PersistentCollection, CollectionEntry> collectionEntries;
|
private IdentityMap<PersistentCollection, CollectionEntry> collectionEntries;
|
||||||
|
|
||||||
// Collection wrappers, by the CollectionKey
|
// Collection wrappers, by the CollectionKey
|
||||||
private Map<CollectionKey, PersistentCollection> collectionsByKey;
|
private HashMap<CollectionKey, PersistentCollection> collectionsByKey;
|
||||||
|
|
||||||
// Set of EntityKeys of deleted objects
|
// Set of EntityKeys of deleted objects
|
||||||
private HashSet<EntityKey> nullifiableEntityKeys;
|
private HashSet<EntityKey> nullifiableEntityKeys;
|
||||||
@ -126,15 +137,15 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
|||||||
|
|
||||||
// A list of collection wrappers that were instantiating during result set
|
// A list of collection wrappers that were instantiating during result set
|
||||||
// processing, that we will need to initialize at the end of the query
|
// processing, that we will need to initialize at the end of the query
|
||||||
private List<PersistentCollection> nonlazyCollections;
|
private ArrayList<PersistentCollection> nonlazyCollections;
|
||||||
|
|
||||||
// A container for collections we load up when the owning entity is not
|
// A container for collections we load up when the owning entity is not
|
||||||
// yet loaded ... for now, this is purely transient!
|
// yet loaded ... for now, this is purely transient!
|
||||||
private Map<CollectionKey,PersistentCollection> unownedCollections;
|
private HashMap<CollectionKey,PersistentCollection> unownedCollections;
|
||||||
|
|
||||||
// Parent entities cache by their child for cascading
|
// Parent entities cache by their child for cascading
|
||||||
// May be empty or not contains all relation
|
// May be empty or not contains all relation
|
||||||
private Map<Object,Object> parentsByChild;
|
private IdentityHashMap<Object,Object> parentsByChild;
|
||||||
|
|
||||||
private int cascading;
|
private int cascading;
|
||||||
private int loadCounter;
|
private int loadCounter;
|
||||||
@ -147,7 +158,6 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
|||||||
private LoadContexts loadContexts;
|
private LoadContexts loadContexts;
|
||||||
private BatchFetchQueue batchFetchQueue;
|
private BatchFetchQueue batchFetchQueue;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a PersistentContext, bound to the given session.
|
* Constructs a PersistentContext, bound to the given session.
|
||||||
*
|
*
|
||||||
@ -155,7 +165,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
|||||||
*/
|
*/
|
||||||
public StatefulPersistenceContext(SharedSessionContractImplementor session) {
|
public StatefulPersistenceContext(SharedSessionContractImplementor session) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
entityEntryContext = new EntityEntryContext( this );
|
this.entityEntryContext = new EntityEntryContext( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConcurrentMap<EntityKey, Object> getOrInitializeProxiesByKey() {
|
private ConcurrentMap<EntityKey, Object> getOrInitializeProxiesByKey() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user