Can anyone point me to an error?
Note. This is a simplified test version extracted from my real application. So the weird use of 3 entity managers and em1.getTransaction () starts (). em1.clear (); em1.close (); at the end of each section. In a real application, this happens at different times. HibernateUtil is mostly copied from a tutorial.
HibernateUtil.open();
EntityManager em1 = HibernateUtil.reserveEntityManager();
em1.getTransaction().begin();
StringType st1 = new StringType();
st1.setName("a");
em1.persist(st1);
em1.getTransaction().commit();
em1.getTransaction().begin();
em1.clear();
em1.close();
EntityManager em2 = HibernateUtil.reserveEntityManager();
em2.getTransaction().begin();
StringType st2 = new StringType();
st2.setName("a");
st2.setId(st1.getId());
em2.merge(st2);
em2.getTransaction().commit();
em2.getTransaction().begin();
em2.clear();
em2.close();
EntityManager em3 = HibernateUtil.reserveEntityManager();
em3.getTransaction().begin();
StringType st3 = new StringType();
st3.setName("a");
st3.setId(st1.getId());
[b]em3.merge(st3);[/b]
em3.getTransaction().commit();
em3.getTransaction().begin();
em3.clear();
em3.close();
public static EntityManager reserveEntityManager()
{
return emf.createEntityManager();
}
public static void open()
{
try
{
emf = Persistence.createEntityManagerFactory("manager1");
}
catch (Throwable e)
{
throw new ExceptionInInitializerError(e);
}
}
javax.persistence.OptimisticLockException: org.hibernate.StaleObjectStateException: ( ): [WebOrganizer.classes.types.StringType # 174] at org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:646) at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:600) at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:237) WebOrganizer.web.servlets.TypeServlet.test2 (TypeServlet.java:356) at sun.reflect.NativeMethodAccessorImpl.invoke0 ( ) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580) at org.testng.internal.Invoker.invokeMethod(Invoker.java:517) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:669) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:956) org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126) org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110) org.testng.TestRunner.runWorkers(TestRunner.java:720) org.testng.TestRunner.privateRun(TestRunner.java:590) org.testng.TestRunner.run(TestRunner.java:484) org.testng.SuiteRunner.runTest(SuiteRunner.java:332) org.testng.SuiteRunner.runSequently(SuiteRunner.java:327) org.testng.SuiteRunner.privateRun(SuiteRunner.java:299) org.testng.SuiteRunner.run(SuiteRunner.java:204) org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:864) org.testng.TestNG.runSuitesLocally(TestNG.java:830) org.testng.TestNG.run(TestNG.java:748) org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73) org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:124) at sun.reflect.NativeMethodAccessorImpl.invoke0 ( ) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
: org.hibernate.StaleObjectStateException: ( ): [WebOrganizer.classes.types.StringType # 174] at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:261) org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:120) org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53) org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677) org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661) org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665) at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:228) ... 28
michael