public void addEntity(EntityKey key, Object object) { entitiesByKey.put(key, object); getBatchFetchQueue().removeBatchLoadableEntityKey(key); }
/** * Remove an entity from the session cache, also clear * up other state associated with the entity, all except * for the <tt>EntityEntry</tt> */ public Object removeEntity(EntityKey key) { Object entity = entitiesByKey.remove(key); Iterator iter = entitiesByUniqueKey.values().iterator(); while ( iter.hasNext() ) { if ( iter.next()==entity ) iter.remove(); } entitySnapshotsByKey.remove(key); nullifiableEntityKeys.remove(key); getBatchFetchQueue().removeBatchLoadableEntityKey(key); getBatchFetchQueue().removeSubselect(key); return entity; }
.getBatchFetchQueue() .addSubselect( rowKeys[i], subselectFetch );
/** * 1. Recreate the collection key -> collection map * 2. rebuild the collection entries * 3. call Interceptor.postFlush() */ protected void postFlush(SessionImplementor session) throws HibernateException { log.trace( "post flush" ); final PersistenceContext persistenceContext = session.getPersistenceContext(); persistenceContext.getCollectionsByKey().clear(); persistenceContext.getBatchFetchQueue().clearSubselects(); //the database has changed now, so the subselect results need to be invalidated Iterator iter = persistenceContext.getCollectionEntries().entrySet().iterator(); while ( iter.hasNext() ) { Map.Entry me = (Map.Entry) iter.next(); CollectionEntry ce = (CollectionEntry) me.getValue(); PersistentCollection pc = (PersistentCollection) me.getKey(); if ( ce.postFlush(pc) ) { //if the collection is dereferenced, remove from the session cache iter.remove(); } else if ( ce.isReached() ) { //otherwise recreate the mapping between the collection and its key persistenceContext.getCollectionsByKey().put( new CollectionKey( ce.getCurrentPersister(), ce.getCurrentKey(), session.getEntityMode() ), pc ); } } session.getInterceptor().postFlush( persistenceContext.getEntitiesByKey().values().iterator() ); }
.getBatchFetchQueue() .addSubselect( rowKeys[i], subselectFetch );
private CollectionInitializer getSubselectInitializer(Serializable key, SessionImplementor session) { if ( !isSubselectLoadable() ) return null; final PersistenceContext persistenceContext = session.getPersistenceContext(); SubselectFetch subselect = persistenceContext.getBatchFetchQueue() .getSubselect( new EntityKey( key, getOwnerEntityPersister(), session.getEntityMode() ) ); if (subselect == null) { return null; } else { // Take care of any entities that might have // been evicted! Iterator iter = subselect.getResult().iterator(); while ( iter.hasNext() ) { if ( !persistenceContext.containsEntity( (EntityKey) iter.next() ) ) { iter.remove(); } } // Run a subquery loader return createSubselectInitializer( subselect, session ); } }
persistenceContext.getBatchFetchQueue()
public void initialize(Serializable id, SessionImplementor session) throws HibernateException { Serializable[] batch = session.getPersistenceContext().getBatchFetchQueue() .getCollectionBatch( collectionPersister, id, batchSizes[0], session.getEntityMode() ); for ( int i=0; i<batchSizes.length-1; i++) { final int smallBatchSize = batchSizes[i]; if ( batch[smallBatchSize-1]!=null ) { Serializable[] smallBatch = new Serializable[smallBatchSize]; System.arraycopy(batch, 0, smallBatch, 0, smallBatchSize); loaders[i].loadCollectionBatch( session, smallBatch, collectionPersister.getKeyType() ); return; //EARLY EXIT! } } loaders[batchSizes.length-1].loadCollection( session, id, collectionPersister.getKeyType() ); }
public void initialize(Serializable id, SessionImplementor session) throws HibernateException { Serializable[] batch = session.getPersistenceContext().getBatchFetchQueue() .getCollectionBatch( collectionPersister, id, batchSizes[0], session.getEntityMode() ); for ( int i=0; i<batchSizes.length-1; i++) { final int smallBatchSize = batchSizes[i]; if ( batch[smallBatchSize-1]!=null ) { Serializable[] smallBatch = new Serializable[smallBatchSize]; System.arraycopy(batch, 0, smallBatch, 0, smallBatchSize); loaders[i].loadCollectionBatch( session, smallBatch, collectionPersister.getKeyType() ); return; //EARLY EXIT! } } loaders[batchSizes.length-1].loadCollection( session, id, collectionPersister.getKeyType() ); }
public Object load(Serializable id, Object optionalObject, SessionImplementor session) throws HibernateException { Serializable[] batch = session.getPersistenceContext() .getBatchFetchQueue() .getEntityBatch( persister, id, batchSizes[0], session.getEntityMode() ); for ( int i=0; i<batchSizes.length-1; i++) { final int smallBatchSize = batchSizes[i]; if ( batch[smallBatchSize-1]!=null ) { Serializable[] smallBatch = new Serializable[smallBatchSize]; System.arraycopy(batch, 0, smallBatch, 0, smallBatchSize); final List results = loaders[i].loadEntityBatch( session, smallBatch, idType, optionalObject, persister.getEntityName(), id, persister ); return getObjectFromList(results, id, session); //EARLY EXIT } } return ( (UniqueEntityLoader) loaders[batchSizes.length-1] ).load(id, optionalObject, session); }
public Object load(Serializable id, Object optionalObject, SessionImplementor session) throws HibernateException { Serializable[] batch = session.getPersistenceContext() .getBatchFetchQueue() .getEntityBatch( persister, id, batchSizes[0], session.getEntityMode() ); for ( int i=0; i<batchSizes.length-1; i++) { final int smallBatchSize = batchSizes[i]; if ( batch[smallBatchSize-1]!=null ) { Serializable[] smallBatch = new Serializable[smallBatchSize]; System.arraycopy(batch, 0, smallBatch, 0, smallBatchSize); final List results = loaders[i].loadEntityBatch( session, smallBatch, idType, optionalObject, persister.getEntityName(), id, persister ); return getObjectFromList(results, id, session); //EARLY EXIT } } return ( (UniqueEntityLoader) loaders[batchSizes.length-1] ).load(id, optionalObject, session); }
private CollectionInitializer getSubselectInitializer(Serializable key, SessionImplementor session) { if ( !isSubselectLoadable() ) { return null; } final PersistenceContext persistenceContext = session.getPersistenceContext(); SubselectFetch subselect = persistenceContext.getBatchFetchQueue() .getSubselect( new EntityKey( key, getOwnerEntityPersister(), session.getEntityMode() ) ); if (subselect == null) { return null; } else { // Take care of any entities that might have // been evicted! Iterator iter = subselect.getResult().iterator(); while ( iter.hasNext() ) { if ( !persistenceContext.containsEntity( (EntityKey) iter.next() ) ) { iter.remove(); } } // Run a subquery loader return createSubselectInitializer( subselect, session ); } }
/** * Register the entity as batch loadable, if enabled */ private void scheduleBatchLoad(Serializable id, SessionImplementor session) throws MappingException { if (uniqueKeyPropertyName==null) { //cannot batch fetch by unique key EntityPersister persister = session.getFactory() .getEntityPersister( getAssociatedEntityName() ); session.getPersistenceContext() .getBatchFetchQueue() .addBatchLoadableEntityKey( new EntityKey( id, persister, session.getEntityMode() ) ); } }
persistenceContext.getBatchFetchQueue().addBatchLoadableEntityKey(keyToLoad); persistenceContext.addProxy(keyToLoad, proxy); return proxy;
persistenceContext.getBatchFetchQueue().addBatchLoadableEntityKey(keyToLoad); persistenceContext.addProxy(keyToLoad, proxy); return proxy;
if ( !session.getPersistenceContext().containsEntity( entityKey ) ) { session.getPersistenceContext() .getBatchFetchQueue() .addBatchLoadableEntityKey( entityKey );