【问题标题】:Creating EntityManager using EntityManagerFactory in web application without @PersistenceContext在没有 @PersistenceContext 的 Web 应用程序中使用 EntityManagerFactory 创建 EntityManager
【发布时间】:2022-01-07 22:47:06
【问题描述】:

我正在使用 JPA 创建一个 Web 应用程序。我已经用连接池 c3p0 配置了 Hibernate。
在我的情况下,无法使用 @PersistenceContext 注释注入 EntityManager。
在 Java EE 文档中,他们说使用 EntityManagerFactory 实例同时创建 EntityManager 实例是线程安全的。
因此,我在我的 Web 应用程序中为我的持久性单元使用了一个静态 EntityManagerFactory 实例,并使用它创建了 EntityManagers。
但是他们说 EntityManager 不能同时使用(不是线程安全的)。
因此,根据这个,我为每个 servlet 请求分别创建一个 EntityManager 实例,在同一个线程中使用它,然后处理它。
我可以这样吗?

【问题讨论】:

    标签: java jpa entitymanager entitymanagerfactory


    【解决方案1】:

    是的,顺便说一下 - 这正是 @PersistenceContext 将要做的。它将:

    1. 在调用@Transactional 后创建EntityManager(或者在设置OpenEntityManagerInViewFilter 的情况下 - 当调用过滤器时)
    2. 将其放入 ThreadLocal 变量中。这样该线程中的任何代码都可以访问它。
    3. 一旦执行超出@Transactional 方法(或超出过滤器) - 它将关闭 EntityManager

    【讨论】:

    • 现在我清楚了,谢谢
    猜你喜欢
    • 2017-03-20
    • 2015-01-31
    • 2016-09-04
    • 1970-01-01
    • 2019-08-16
    • 2020-08-09
    • 1970-01-01
    • 2020-04-20
    • 2023-03-23
    相关资源
    最近更新 更多