Steve Ebersole wrote:
Without having had a chance yet to look, what exactly are the proposed
changes in regards to lists and bags?

The changes are identical to PersistentSet omitting the add* methods. I.e. clear, remove, removeAll, and retainAll all use the idiom:
 initialize(true)
 if ( list.clear() )
 {
    list.clear() )
    dirty();
    return true;
 } else {
     return false;
 }


As for the code snippet and question, you'd need to find out why the
collection is considered dirty on merge...

Ok. Good to know it's not expected behavior. I know that it's initially dirty due to CollectionType.replaceElements usage of the PersistenCollection rather than raw collection. And there are only two places where AbstractPersistentCollection.clearDirty() is called:

(1) postAction -- this is too late, and
(2) new CollectionEntry() -- specifically (note the comment):

        "public CollectionEntry(...
        //...
        
collection.clearDirty(); //a newly wrapped collection is NOT dirty (or we get unnecessary version updates)"

                
But these CollectionEntries are created in DefaultMergeEventListener.entityIsDetached(231). Too early, really.



_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to