HHH-9455 : Unnecessary select count query in some cases

(cherry picked from commit 552c1c06d5)
(cherry picked from commit 460e966214)
This commit is contained in:
Gail Badner 2014-10-20 16:35:00 -07:00
parent b197f6a643
commit e2de2a6fcf
2 changed files with 12 additions and 8 deletions

View File

@ -1766,8 +1766,7 @@ public abstract class AbstractCollectionPersister
public void processQueuedOps(PersistentCollection collection, Serializable key, SessionImplementor session)
throws HibernateException {
if ( collection.hasQueuedOperations() ) {
int nextIndex = getSize( key, session );
doProcessQueuedOps( collection, key, nextIndex, session );
doProcessQueuedOps( collection, key, session );
}
}

View File

@ -195,28 +195,33 @@ public class OneToManyPersister extends AbstractCollectionPersister {
public void recreate(PersistentCollection collection, Serializable id, SessionImplementor session)
throws HibernateException {
super.recreate( collection, id, session );
writeIndex( collection, collection.entries( this ), id, 0, session );
writeIndex( collection, collection.entries( this ), id, true, session );
}
@Override
public void insertRows(PersistentCollection collection, Serializable id, SessionImplementor session)
throws HibernateException {
super.insertRows( collection, id, session );
writeIndex( collection, collection.entries( this ), id, 0, session );
writeIndex( collection, collection.entries( this ), id, true, session );
}
@Override
protected void doProcessQueuedOps(PersistentCollection collection, Serializable id, SessionImplementor session)
throws HibernateException {
writeIndex( collection, collection.queuedAdditionIterator(), id, getSize( id, session ), session );
writeIndex( collection, collection.queuedAdditionIterator(), id, false, session );
}
private void writeIndex(PersistentCollection collection, Iterator entries, Serializable id,
int nextIndex, SessionImplementor session) {
private void writeIndex(
PersistentCollection collection,
Iterator entries,
Serializable id,
boolean resetIndex,
SessionImplementor session) {
// If one-to-many and inverse, still need to create the index. See HHH-5732.
if ( isInverse && hasIndex && !indexContainsFormula ) {
try {
if ( entries.hasNext() ) {
int nextIndex = resetIndex ? 0 : getSize( id, session );
Expectation expectation = Expectations.appropriateExpectation( getUpdateCheckStyle() );
while ( entries.hasNext() ) {