private Object convertCacheReferenceEntryToEntity( ReferenceCacheEntryImpl referenceCacheEntry, EventSource session, EntityKey entityKey) { final Object entity = referenceCacheEntry.getReference(); if ( entity == null ) { throw new IllegalStateException( "Reference cache entry contained null : " + referenceCacheEntry.toString() ); } else { makeEntityCircularReferenceSafe( referenceCacheEntry, session, entity, entityKey ); return entity; } }
@Override public CacheEntry buildCacheEntry(Object entity, Object[] state, Object version, SharedSessionContractImplementor session) { return new ReferenceCacheEntryImpl( entity, persister ); } }
private void makeEntityCircularReferenceSafe( ReferenceCacheEntryImpl referenceCacheEntry, EventSource session, Object entity, EntityKey entityKey) { // make it circular-reference safe final StatefulPersistenceContext statefulPersistenceContext = (StatefulPersistenceContext) session.getPersistenceContext(); if ( ( entity instanceof ManagedEntity ) ) { statefulPersistenceContext.addReferenceEntry( entity, Status.READ_ONLY ); } else { TwoPhaseLoad.addUninitializedCachedEntity( entityKey, entity, referenceCacheEntry.getSubclassPersister(), LockMode.NONE, referenceCacheEntry.getVersion(), session ); } statefulPersistenceContext.initializeNonLazyCollections(); }
private void makeEntityCircularReferenceSafe( ReferenceCacheEntryImpl referenceCacheEntry, EventSource session, Object entity, EntityKey entityKey) { // make it circular-reference safe final StatefulPersistenceContext statefulPersistenceContext = (StatefulPersistenceContext) session.getPersistenceContext(); if ( ( entity instanceof ManagedEntity ) ) { statefulPersistenceContext.addReferenceEntry( entity, Status.READ_ONLY ); } else { TwoPhaseLoad.addUninitializedCachedEntity( entityKey, entity, referenceCacheEntry.getSubclassDescriptor(), LockMode.NONE, referenceCacheEntry.getVersion(), session ); } statefulPersistenceContext.initializeNonLazyCollections(); }
if ( cachedEntry != null ) { CacheEntry entry = (CacheEntry) persister.getCacheEntryStructure().destructure( cachedEntry, factory ); return ( (ReferenceCacheEntryImpl) entry ).getReference();
private Object convertCacheReferenceEntryToEntity( ReferenceCacheEntryImpl referenceCacheEntry, EventSource session, EntityKey entityKey) { final Object entity = referenceCacheEntry.getReference(); if ( entity == null ) { throw new IllegalStateException( "Reference cache entry contained null : " + referenceCacheEntry.toString() ); } else { makeEntityCircularReferenceSafe( referenceCacheEntry, session, entity, entityKey ); return entity; } }