1

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

4

1 回答 1

1

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

  1. EntityManager调用一次创建@Transactional(或在OpenEntityManagerInViewFilter设置的情况下 - 调用过滤器时)
  2. 把它放在 ThreadLocal 变量中。这样该线程中的任何代码都可以访问它。
  3. 一旦执行超出@Transactional方法(或超出过滤器) - 它将关闭 EntityManager
于 2022-01-07T23:10:06.777 回答