]
Gail Badner updated HHH-5742:
-----------------------------
Fix Version/s: (was: 3.6.1)
3.6.2
PersistentSet#iterator() iterates over element which had been removed
from set
------------------------------------------------------------------------------
Key: HHH-5742
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-5742
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.5.0-Final, 3.6.0
Environment: 3.6.0FINAL, database indipendent (attached testcase based on
hsqldb)
Reporter: Guenther Demetz
Priority: Critical
Fix For: 3.6.2, 4.0.0.Alpha1
Attachments: TestIterateOverExtraLazyCollectionWithInverseOwner.jar
PRECONDITONS:
-the relation is declared OneToMany with inverse owner (=mappedBy attribute specified)
-the relation is declared extra lazy @LazyCollection (LazyCollectionOption.EXTRA)
BUG: PersistenSet.iterator().next() returns element which previously had been removed
from the set
myPersistenSet.remove(obj);
assertFalse(myPersistenSet.iterator().next() == obj);
CAUSE:
PersistentSet#iterator() implementation does differ from PersistentSet#contains() and
PersistentSet#size() as it doesn't call the necessary flush() if:
- the set isn't initialized
- the set is declared extra lazy
- the set has queued Operations (hasQueuedOperations == true) to be flushed
Please see attached TESTCASE for more details.
This IMHO is a critical bug, as it could create serious damage to companies using
hibernate:
imagine a company cancels a order-position and nevertheless the canceled position is
subsequently delivered or/and invoiced to the customer, because the iterator returns the
removed element.
Thanks for attention.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: