[jboss-user] [EJB 3.0] - Confusion over em.refresh()?
do-not-reply at jboss.com
Tue May 15 20:01:43 EDT 2007
I'm working on a Seam/EJB3 app where I have a persisted object that I am editing. The object has a many-to-one set, to which the user can add newly created objects via the UI. If the user adds an object and chooses "ok" to persist their changes then all is well, the new object gets persisted just fine. The problem I am having is when the user chooses "Cancel". Rather than unpicking their changes, I wanted to simply call em.refresh(obj) to reset the object back to the previous state, however I get the following exception when I try this:
No row with the given identifier exists: [com.example.model.Address#0]
| at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
| at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:269)
| at org.jboss.ejb3.entity.ExtendedEntityManager.refresh(ExtendedEntityManager.java:154)
| at org.jboss.seam.persistence.EntityManagerProxy.refresh(EntityManagerProxy.java:133)
So, it looks like the EM has tried to refresh one of the newly created child objects rather simply restoring the object's many-to-one set.
If I call obj.getAddresses().clear() prior to calling refresh() then it succeeds. I get my object with the previous state.
My (simplistic?) expectation of refresh was that I could call it regardless of the state I manage to get the object into and it will revert it back to the state of the database. Should this be the case?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4045994#4045994
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4045994
More information about the jboss-user