Hi! i Have found CustomerInfo Object (with cascade="all" attribute in configuration file),and now trying to update it i do the following
Set a = customerInfo.getCustomerAccounts(); /*customerAccount1 with no primery key (i want to save this record for first time) */ a.add(customerAccount1); /*customerAccount2 with primery key i want this record to be updated in database */ a.add(customerAccount2); /*customerAccount3 with pk i want this record to be deleted */ a.remove(customerAccount3);
but when i try to session.saveUpdate(customerInfo) and then session.close(),i get following exception.
net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 474, of class: com.cstel.personalloan.hibernate.CustomerAccount
Can anybody plz tell me where i am doing something wrong. also there is a case where i want to first delete all those old records in a set and then add new records to it , i am using a.clear() for that is that ok r i should have to do something else for it. thanks in advance.
I don't know what your exact code looks like, however, please let me take a shot at what may be the cause of your problems.
When you are in-between a transaction and you are adding and updating, etc.. noting is reflected until you do a session.save(aClass) or a session.saveOrUpdate(aClass) and then issue a flush(), changes are not being persisted so you are dealing with phantom objects (records) that do not exist, at least that's my story, and I'm sticking with it (for now).
On your save you should get a primary key back (as long as you are not using session.persist()