diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java index 47ed49520f..b693d8e8a2 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java @@ -1635,8 +1635,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 ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java index 144801195c..4f802f41c9 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java @@ -181,28 +181,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() ) {