gpt4 book ai didi

java - 通过@PersitenceContext 或@PersitenceUnit 注入(inject)一个EntityManagerFactory?

转载 作者:搜寻专家 更新时间:2023-11-01 03:18:55 25 4
gpt4 key购买 nike

我一直认为@PersistenceContext 用于将 EntityManager 注入(inject)容器管理的应用程序,而@PersistenceUnit 用于注入(inject) EntityManagerFactory。

Javadoc 说

对于 PersistenceUnit ( http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceUnit.html )

Expresses a dependency on an EntityManagerFactory and its associated persistence unit.

对于 PersistenceContext ( http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceContext.html)

Expresses a dependency on a container-managed EntityManager and its associated persistence context.

到目前为止一切顺利,但后来我正在阅读 JPA 教程(请参阅 https://docs.oracle.com/cd/E19798-01/821-1841/bnbqy/index.html),其中包含这样的示例

The following example shows how to manage transactions in an application that uses an application-managed entity manager:

@PersistenceContext
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try {
utx.begin();
em.persist(SomeEntity);
em.merge(AnotherEntity);
em.remove(ThirdEntity);
utx.commit();
} catch (Exception e) {
utx.rollback();
}

那么如果我们谈论的是应用程序托管代码,那么 PersistenceContext 也可以引用 EntityManagerFactory?

免责声明——我猜与这个问题的答案无关——PersistenceUnit vs PersistenceContext

最佳答案

I've always thought that @PersistenceContext was for injecting EntityManager into a container-managed application, while @PersistenceUnit was for injecting an EntityManagerFactory.

没错。

我猜 JPA 教程的例子是一个粗心的错误。以前在同一部分“应用程序管理的实体管理器”中写过

To obtain an EntityManager instance, you first must obtain an EntityManagerFactory instance by injecting it into the application component by means of the javax.persistence.PersistenceUnit annotation:

@PersistenceUnit EntityManagerFactory emf;

Then obtain an EntityManager from the EntityManagerFactory instance:

EntityManager em = emf.createEntityManager();

关于java - 通过@PersitenceContext 或@PersitenceUnit 注入(inject)一个EntityManagerFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com