@Override public final Iterator queuedAdditionIterator() { if ( hasQueuedOperations() ) { return new Iterator() { private int index; @Override public Object next() { return operationQueue.get( index++ ).getAddedInstance(); } @Override public boolean hasNext() { return index < operationQueue.size(); } @Override public void remove() { throw new UnsupportedOperationException(); } }; } else { return Collections.emptyIterator(); } }
@Override @SuppressWarnings({"unchecked"}) public final Collection getQueuedOrphans(String entityName) { if ( hasQueuedOperations() ) { final Collection additions = new ArrayList( operationQueue.size() ); final Collection removals = new ArrayList( operationQueue.size() ); for ( DelayedOperation operation : operationQueue ) { additions.add( operation.getAddedInstance() ); removals.add( operation.getOrphan() ); } return getOrphans( removals, additions, entityName, session ); } else { return Collections.EMPTY_LIST; } }
@Override public boolean afterInitialize() { setInitialized(); //do this bit after setting initialized to true or it will recurse if ( hasQueuedOperations() ) { performQueuedOperations(); cachedSize = -1; return false; } else { return true; } }
protected boolean readSize() { if ( !initialized ) { if ( cachedSize != -1 && !hasQueuedOperations() ) { return true;
@Override public Boolean doWork() { final CollectionEntry entry = session.getPersistenceContext().getCollectionEntry( AbstractPersistentCollection.this ); final CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.indexExists( entry.getLoadedKey(), index, session ); } else { read(); } return null; } }
@Override public Boolean doWork() { final CollectionEntry entry = session.getPersistenceContext().getCollectionEntry( AbstractPersistentCollection.this ); final CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.elementExists( entry.getLoadedKey(), element, session ); } else { read(); } return null; } }
@Override public final boolean setCurrentSession(SharedSessionContractImplementor session) throws HibernateException { if ( session == this.session ) { return false; } else if ( this.session != null ) { final String msg = generateUnexpectedSessionStateMessage( session ); if ( isConnectedToSession() ) { throw new HibernateException( "Illegal attempt to associate a collection with two open sessions. " + msg ); } else { LOG.logUnexpectedSessionInCollectionNotConnected( msg ); } } if ( hasQueuedOperations() ) { LOG.queuedOperationWhenAttachToSession( MessageHelper.collectionInfoString( getRole(), getKey() ) ); } this.session = session; return true; }
@Override public Boolean doWork() { final CollectionEntry entry = session.getPersistenceContext().getCollectionEntry( AbstractPersistentCollection.this ); if ( entry != null ) { final CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } cachedSize = persister.getSize( entry.getLoadedKey(), session ); return true; } else { read(); } } else{ throwLazyInitializationExceptionIfNotConnected(); } return false; } }
assertTrue( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); s.getTransaction().commit(); assertFalse( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); s.close(); p = (Parent) s.merge( p ); assertFalse( Hibernate.isInitialized( p.getChildren() ) ); assertFalse( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); s.getTransaction().commit(); s.close();
if ( currentSession == this.session ) { if ( !isTempSession ) { if ( hasQueuedOperations() ) { final String collectionInfoString = MessageHelper.collectionInfoString( getRole(), getKey() ); try {
assertFalse( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); s.getTransaction().commit(); s.close(); p = (Parent) s.merge( p ); assertTrue( Hibernate.isInitialized( p.getChildren() ) ); assertFalse( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); s.getTransaction().commit(); s.close();
p.getChildren().add( c ); assertFalse( Hibernate.isInitialized( p.getChildren() ) ); assertTrue( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); assertTrue( ( (AbstractPersistentCollection) pWithQueuedOperations.getChildren() ).hasQueuedOperations() ); assertFalse( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() );
p.getChildren().add( c ); assertFalse( Hibernate.isInitialized( p.getChildren() ) ); assertTrue( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() ); assertTrue( ( (AbstractPersistentCollection) pAfterDetachWithQueuedOperations.getChildren() ).hasQueuedOperations() ); assertTrue( ( (AbstractPersistentCollection) pAfterDetachWithQueuedOperations.getChildren() ).hasQueuedOperations() );
p.getChildren().add( c ); assertFalse( Hibernate.isInitialized( p.getChildren() ) ); assertTrue( ( (AbstractPersistentCollection) p.getChildren() ).hasQueuedOperations() );
@Override public boolean afterInitialize() { setInitialized(); //do this bit after setting initialized to true or it will recurse if ( hasQueuedOperations() ) { performQueuedOperations(); cachedSize = -1; return false; } else { return true; } }
protected Boolean readElementExistence(Object element) { if (!initialized) { throwLazyInitializationExceptionIfNotConnected(); CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(this); CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.elementExists( entry.getLoadedKey(), element, session ); } } read(); return null; }
protected Boolean readIndexExistence(Object index) { if (!initialized) { throwLazyInitializationExceptionIfNotConnected(); CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(this); CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.indexExists( entry.getLoadedKey(), index, session ); } } read(); return null; }
protected Boolean readElementExistence(Object element) { if (!initialized) { throwLazyInitializationExceptionIfNotConnected(); CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(this); CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.elementExists( entry.getLoadedKey(), element, session ); } } read(); return null; }
protected Object readElementByIndex(Object index) { if (!initialized) { throwLazyInitializationExceptionIfNotConnected(); CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(this); CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.getElementByIndex( entry.getLoadedKey(), index, session, owner ); } } read(); return UNKNOWN; }
protected Boolean readIndexExistence(Object index) { if (!initialized) { throwLazyInitializationExceptionIfNotConnected(); CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(this); CollectionPersister persister = entry.getLoadedPersister(); if ( persister.isExtraLazy() ) { if ( hasQueuedOperations() ) { session.flush(); } return persister.indexExists( entry.getLoadedKey(), index, session ); } } read(); return null; }