我正在使用Eclipse Link JPA与Tomcat和MySQL。我将实体管理器的静态对象保留为
em = factory.createEntityManager();
此实体管理器在应用程序的整个生命周期内保持打开状态。 我使用。
存储实体em.getTransaction().begin();
em.persist(obj);
em.flush();
em.getTransaction().commit();
条目已成功写入MySQL,我可以从MySQL控制台检查它们。 问题是当我尝试使用时检索条目。 em.find(MyType.class,id); 它什么也没有返回,但如果我重新启动tomcat,那么retreival会成功运行。任何帮助将不胜感激。 在此先感谢。
答案 0 :(得分:1)
我不确定这是否是导致问题的原因,但将单个EntityManager作为静态变量保留在Web应用程序中通常不是一个好主意,因为EntityManager不是线程安全的。相反,您应该保持对EntityManagerFactory的静态引用,并为每个HTTP请求创建一个EntityManager实例(在其自己的线程中运行)。