我对 persistence context 及其生命周期感到有点困惑 .
假设我有一个简单的 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 上的每个方法调用都是
就像一个事务本身一样,所以创建了一个持久化上下文
检索结果或启动更改后立即关闭,
并且返回的实体是分离的 .
Please correct me if I'm wrong.
现在即使在上面的一种方法中使用 EntityManager 两次,两个独立的持久化上下文会一个接一个地发挥作用,是吗?
仅当持久性conext尚未关闭时, EntityManager 的调用才会返回托管实体,并且当我们处于事务范围内时会发生这种情况 .
我似乎不清楚我在问什么,但我只是希望你验证我的知识或提供更多的信息,感谢你的时间和耐心 .
1 回答
PersistenceContext一直存在,直到EntityManager关闭 . 当EntityManager关闭时,取决于EntityManager的范围以及它是由应用程序还是JavaEE容器管理 . 详情请见:http://piotrnowicki.com/2012/11/types-of-entitymanagers-application-managed-entitymanager/