我对持久化上下文及其生命周期有点困惑。
假设我有一个简单的 DAO 类,如下所示。
public class UserDao
{
@PersistenceContext
private EntityManager manager;
public User getUserById(Integer id)
{
return manager.find(User.class, id);
}
public User getUserByName(String name)
{
Query q = manager.createQuery("SELECT u FROM User u WHERE u.name = ?1");
q.setParameter(1, name);
@SuppressWarnings("unchecked")
List<User> list = (List<User>) q.getResultList();
if(!list.isEmpty())
return list.get(0);
return null;
}
}
据我了解,EntityManager 上的每次方法调用都是
就像一个事务本身一样,因此创建了一个持久化上下文
并在检索结果或执行更改后立即关闭,
并且返回的实体是分离的。
如果我错了,请纠正我。
现在,即使在上述方法之一中使用了 EntityManager 两次, 两个独立的持久性上下文将相继发挥作用, 是对的吗 ?
仅当持久性上下文尚未关闭时,EntityManager 调用才会返回托管实体,并且当我们处于事务范围内时,就会发生这种情况。
我的问题可能看起来不太清楚,但我只是希望您验证我的知识或提供澄清,感谢您的时间和耐心。
最佳答案
PersistenceContext 一直存在,直到 EntityManager 关闭。 EntityManager 何时关闭,取决于 EntityManager 的范围以及它是由您的应用程序还是 JavaEE 容器管理。详情请参阅此处:http://piotrnowicki.com/2012/11/types-of-entitymanagers-application-managed-entitymanager/
关于java - JPA 中的持久化上下文生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442927/