ToManyList contains references to transient objects
---------------------------------------------------
Key: CAY-614
URL: http://issues.apache.org/cayenne/browse/CAY-614
Project: Cayenne
Type: Bug
Components: Cayenne Core Library
Versions: 1.2 [STABLE]
Reporter: Mike Kienenberger
Assigned to: Mike Kienenberger
ToManyList can contain references to temporary objects, which causes transient objects to be serialized with the DataContext.
The fix is to not add NEW or TRANSIENT objects to the removedFromUnresolved list. These objects will never be removed from a database fetch list as they don't exist in the database, so there's no point in keeping a reference to them.
boolean removeLocal(Object object) {
if (addedToUnresolved != null) {
addedToUnresolved.remove(object);
}
if (removedFromUnresolved == null) {
removedFromUnresolved = new LinkedList();
}
// No point in adding a new or transient object -- these will
never be fetched from the database.
boolean shouldAddToRemovedFromUnresolvedList = true;
if (object instanceof DataObject) {
DataObject dataObject = (DataObject) object;
if ( (dataObject.getPersistenceState() ==
PersistenceState.TRANSIENT)
|| (dataObject.getPersistenceState() == PersistenceState.NEW) ) {
shouldAddToRemovedFromUnresolvedList = false;
}
}
if (shouldAddToRemovedFromUnresolvedList) {
removedFromUnresolved.addLast(object);
}
// this is really meaningless, since we don't know
// if an object was present in the list
return true;
}
-- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/cayenne/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
This archive was generated by hypermail 2.0.0 : Fri Jul 28 2006 - 13:52:16 EDT