【问题标题】:JPA Eclipse link(MySQL)- Data not getting retrieved after successful write to DatabaseJPA Eclipse 链接(MySQL)- 成功写入数据库后未检索到数据
【发布时间】:2013-03-30 17:12:06
【问题描述】:

我正在将 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 成功。任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 你能看到对数据库执行的 SQL 吗?什么是日志输出?
  • 是的,所有条目都以正确的方式制作成SQL。
  • 你能提供它的代码吗? (重现您报告的问题)

标签: java hibernate jakarta-ee jpa eclipselink


【解决方案1】:

我不确定这是否是您的问题的原因,但是在 Web 应用程序中保留单个 EntityManager 作为静态变量通常不是一个好主意,因为 EntityManager 不是线程安全的。相反,您应该保留对 EntityManagerFactory 的静态引用,并为每个 HTTP 请求创建一个 EntityManager 实例(在其自己的线程中运行)。

【讨论】:

  • 我们保留锁以保证操作线程安全。每次都创建 EntityManager 不会导致性能开销。
  • 不,这就是它的用途。这是 Hibernate 文档的摘录(我假设 EclipseLink 也是如此):“EntityManager 是一种廉价的、非线程安全的对象,应该使用一次,用于单个业务流程、单个工作单元,然后丢弃。”
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2019-05-15
  • 2017-08-02
  • 2013-04-26
相关资源
最近更新 更多