HHH-13587 Allocate StatefulPersistenceContext#naturalIdXrefDelegate lazily
This commit is contained in:
parent
aae670b9b3
commit
0538b97d6a
|
@ -262,7 +262,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
if ( loadContexts != null ) {
|
if ( loadContexts != null ) {
|
||||||
loadContexts.cleanup();
|
loadContexts.cleanup();
|
||||||
}
|
}
|
||||||
naturalIdXrefDelegate.clear();
|
naturalIdXrefDelegate = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1762,11 +1762,16 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// NATURAL ID RESOLUTION HANDLING ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// NATURAL ID RESOLUTION HANDLING ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
private final NaturalIdXrefDelegate naturalIdXrefDelegate = new NaturalIdXrefDelegate( this );
|
private NaturalIdXrefDelegate naturalIdXrefDelegate;
|
||||||
|
|
||||||
|
private NaturalIdXrefDelegate getNaturalIdXrefDelegate() {
|
||||||
|
if ( naturalIdXrefDelegate == null ) {
|
||||||
|
this.naturalIdXrefDelegate = new NaturalIdXrefDelegate( this );
|
||||||
|
}
|
||||||
|
return naturalIdXrefDelegate;
|
||||||
|
}
|
||||||
|
|
||||||
private final NaturalIdHelper naturalIdHelper = new NaturalIdHelper() {
|
private final NaturalIdHelper naturalIdHelper = new NaturalIdHelper() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -1785,7 +1790,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
// from a single load event. The first put journal would come from the natural id resolution;
|
// from a single load event. The first put journal would come from the natural id resolution;
|
||||||
// the second comes from the entity loading. In this condition, we want to avoid the multiple
|
// the second comes from the entity loading. In this condition, we want to avoid the multiple
|
||||||
// 'put' stats incrementing.
|
// 'put' stats incrementing.
|
||||||
final boolean justAddedLocally = naturalIdXrefDelegate.cacheNaturalIdCrossReference( persister, id, naturalIdValues );
|
final boolean justAddedLocally = getNaturalIdXrefDelegate().cacheNaturalIdCrossReference( persister, id, naturalIdValues );
|
||||||
|
|
||||||
if ( justAddedLocally && persister.hasNaturalIdCache() ) {
|
if ( justAddedLocally && persister.hasNaturalIdCache() ) {
|
||||||
managedSharedCacheEntries( persister, id, naturalIdValues, null, CachedNaturalIdValueSource.LOAD );
|
managedSharedCacheEntries( persister, id, naturalIdValues, null, CachedNaturalIdValueSource.LOAD );
|
||||||
|
@ -1808,7 +1813,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
final Object[] naturalIdValues = extractNaturalIdValues( state, persister );
|
final Object[] naturalIdValues = extractNaturalIdValues( state, persister );
|
||||||
|
|
||||||
// cache
|
// cache
|
||||||
naturalIdXrefDelegate.cacheNaturalIdCrossReference( persister, id, naturalIdValues );
|
getNaturalIdXrefDelegate().cacheNaturalIdCrossReference( persister, id, naturalIdValues );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1965,7 +1970,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
persister = locateProperPersister( persister );
|
persister = locateProperPersister( persister );
|
||||||
final Object[] naturalIdValues = getNaturalIdValues( state, persister );
|
final Object[] naturalIdValues = getNaturalIdValues( state, persister );
|
||||||
|
|
||||||
final Object[] localNaturalIdValues = naturalIdXrefDelegate.removeNaturalIdCrossReference(
|
final Object[] localNaturalIdValues = getNaturalIdXrefDelegate().removeNaturalIdCrossReference(
|
||||||
persister,
|
persister,
|
||||||
id,
|
id,
|
||||||
naturalIdValues
|
naturalIdValues
|
||||||
|
@ -2004,12 +2009,12 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object[] findCachedNaturalId(EntityPersister persister, Serializable pk) {
|
public Object[] findCachedNaturalId(EntityPersister persister, Serializable pk) {
|
||||||
return naturalIdXrefDelegate.findCachedNaturalId( locateProperPersister( persister ), pk );
|
return getNaturalIdXrefDelegate().findCachedNaturalId( locateProperPersister( persister ), pk );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Serializable findCachedNaturalIdResolution(EntityPersister persister, Object[] naturalIdValues) {
|
public Serializable findCachedNaturalIdResolution(EntityPersister persister, Object[] naturalIdValues) {
|
||||||
return naturalIdXrefDelegate.findCachedNaturalIdResolution( locateProperPersister( persister ), naturalIdValues );
|
return getNaturalIdXrefDelegate().findCachedNaturalIdResolution( locateProperPersister( persister ), naturalIdValues );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -2047,7 +2052,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Serializable> getCachedPkResolutions(EntityPersister entityPersister) {
|
public Collection<Serializable> getCachedPkResolutions(EntityPersister entityPersister) {
|
||||||
return naturalIdXrefDelegate.getCachedPkResolutions( entityPersister );
|
return getNaturalIdXrefDelegate().getCachedPkResolutions( entityPersister );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -2060,6 +2065,7 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
persister = locateProperPersister( persister );
|
persister = locateProperPersister( persister );
|
||||||
|
|
||||||
final Object[] naturalIdValuesFromCurrentObjectState = extractNaturalIdValues( entity, persister );
|
final Object[] naturalIdValuesFromCurrentObjectState = extractNaturalIdValues( entity, persister );
|
||||||
|
final NaturalIdXrefDelegate naturalIdXrefDelegate = getNaturalIdXrefDelegate();
|
||||||
final boolean changed = ! naturalIdXrefDelegate.sameAsCached(
|
final boolean changed = ! naturalIdXrefDelegate.sameAsCached(
|
||||||
persister,
|
persister,
|
||||||
pk,
|
pk,
|
||||||
|
@ -2081,12 +2087,12 @@ public class StatefulPersistenceContext implements PersistenceContext {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanupFromSynchronizations() {
|
public void cleanupFromSynchronizations() {
|
||||||
naturalIdXrefDelegate.unStashInvalidNaturalIdReferences();
|
getNaturalIdXrefDelegate().unStashInvalidNaturalIdReferences();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleEviction(Object object, EntityPersister persister, Serializable identifier) {
|
public void handleEviction(Object object, EntityPersister persister, Serializable identifier) {
|
||||||
naturalIdXrefDelegate.removeNaturalIdCrossReference(
|
getNaturalIdXrefDelegate().removeNaturalIdCrossReference(
|
||||||
persister,
|
persister,
|
||||||
identifier,
|
identifier,
|
||||||
findCachedNaturalId( persister, identifier )
|
findCachedNaturalId( persister, identifier )
|
||||||
|
|
Loading…
Reference in New Issue