StaleObjectStateException ERROR

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

+3
2

- :

EntityTransaction tx1 = em1.getTransaction();
// make your modifications
em1.merge(st1);
tx1.commit();

, EntityManager. JPA , . , EntityManager , ?

+1

? , . , , get flush .

, , commit. flush , .

0

All Articles