Hello, I uses OpenJPA 1.2.1. Even if I add @Version annotation for the entity class,It doesn't work. Every time the merge method is used, OpenJPA try to insert a new row into database.
So, is it a expected behavior of OpenJPA? Merge method cannot attach a detached entity into a new context? Regards, Yu Wang On Mon, Jul 13, 2009 at 5:44 PM, wang yu<[email protected]> wrote: > Hello, > My case is: > 1. Find an entity and close the context. > 2. Update it with user input. > 3. Create a new EntityManager and try to merge it into new context. > > Then the following exception was thrown: > > <openjpa-1.2.1-r752877:753278 nonfatal user error> > org.apache.openjpa.persistence.InvalidStateException: The generated > value processing detected an existing value assigned to this field: > com.XXX.bean.Policy.id. This existing value was either provided via > an initializer or by calling the setter method. You either need to > remove the @GeneratedValue annotation or modify the code to remove the > initializer processing. > org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:483) > org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:463) > > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:744) > > org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134) > > org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134) > > org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:520) > > org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2824) > org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39) > > org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:960) > org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1948) > org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908) > > org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1826) > > org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81) > org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350) > > org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877) > > org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512) > com.XXX.dao.DAOContainer.commitTransaction(DAOContainer.java:195) > com.XXX.policy.PolicyServiceImpl.update(PolicyServiceImpl.java:272) > com.XXX.ds.ServletIndex.doGet(ServletIndex.java:78) > javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > > What's the root cause of this exception? > Thanks! > > Regards, > Yu Wang >
