The PersistentSet recognized as dirty because the PersistentSet.getSnapshot method uses
wrong object as key for clonedSet
-------------------------------------------------------------------------------------------------------------------------
Key: HHH-2485
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2485
Project: Hibernate3
Type: Bug
Components: core
Versions: 3.2.2
Environment: Hibernate version 3.x HSQLDB (db platform independent bug)
Reporter: Csaba Krizsan
Attachments: hibernate-persistentset-test.zip
The org.hibernate.collection.PersisitentSet.getSnapshot method uses the copied object as
key in clonedSet therefore the equalsSnapshot method does not find the copied object in
clonedSet (it uses the original object as key)
public Serializable getSnapshot(CollectionPersister persister)
throws HibernateException {
EntityMode entityMode = getSession().getEntityMode();
//if (set==null) return new Set(session);
HashMap clonedSet = new HashMap( set.size() );
Iterator iter = set.iterator();
while ( iter.hasNext() ) {
Object copied = persister.getElementType()
.deepCopy( iter.next(), entityMode, persister.getFactory() );
clonedSet.put(copied, copied); // <--- BUG The key should be the object returned by
iter.next()
}
return clonedSet;
}
Please fix it using the original object as key during adding the copied object into
clonedSet.
I have attached a test, which creates a parent-child relation which uses <set>.
The testGet method loads the records, prints them and calls session.flush().
The flush() recognizes that the set is dirty because of the aforementioned bug.
In the settest.log file you can see that the set gets dirty during flush.
10:50:55,187 [main] DEBUG .AbstractFlushingEventListener - flushing session
10:50:55,187 [main] DEBUG .AbstractFlushingEventListener - processing flush-time cascades
10:50:55,187 [main] DEBUG .AbstractFlushingEventListener - dirty checking collections
10:50:55,187 [main] DEBUG engine.CollectionEntry - Collection dirty:
[com.webage.test.hibernate.Parent.children#1]
Please fix it
Thanks in advance
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira