I think there's a problem with the copy/copyInto() implementation (using 
b3, can't yet get maven to run to build b4).

When you copy an object which has children, the children are duplicated 
in an odd way. An example (for a house with rooms):

Model:
House [houseId = 1]
        Room [houseId = 1, roomId = 1]

Code:
House h = HousePeer.getHouse(1);
House h2 = h.copy();
h2.save();

Problem:
copy() calls copyInto(), which first of all calls setNew(false) and 
copies the fields on the House (no problem here).
At the end, it unsets the houseId on House and calls setNew(true) again. 
(no problem here either).
In between, it does the following for each Room related to House 1:
        a) Call Room.copy();
        b) Call House.addRoom() on the new house.
        c) Call setNew(true) on the old Room (which seems odd).
It's (b) that's the problem. House.addRoom() first calls getRooms().add, 
and getRooms(), since the House has isNew()=false, fetches the rooms 
which match the houseId (which has not yet been unset). So currently, 
collRooms contains the old room. And that's before the second part of 
addRoom(), which actually calls add() on the collection. So we end up 
with the new House's collRooms containing two entries, one old and one 
new. At this point it all gets a little confused.

Am I wrong, is it wrong, and does anybody know what's supposed to happen 
here?

Gareth

---
Development Team Leader, eGS, 5-7 Singer Street, London EC2A 4BQ. +44 
(0)20 7336 1440

CONFIDENTIALITY: This is email is confidential and intended solely for 
the use of the individual to whom it is addressed.� Any views or 
opinions presented are solely those of the author and do not necessarily 
represent those of eGovernment Solutions (UK) Ltd.� If you are not the 
intended recipient, be advised that you have received this email in 
error and that any use, dissemination, forwarding, or copying of this 
email is strictly prohibited.� If you have received this email in error 
please contact the sender.

Reply via email to