JPA中的持久化上下文是什么?如何使用它?

JPA中的持久化上下文(Persistence Context)是EntityManager管理的实体实例集合。它包含以下作用:

  1. 缓存实体数据。可以提供实体的一级缓存,避免频繁访问数据库。
  2. 管理实体的生命周期(transient、persistent、detached、removed)。
  3. 与当前事务相关联。事务提交或回滚会同步更新或清空持久化上下文。
  4. 定义实体操作的边界。在同一持久化上下文中进行的实体操作会同步到数据库。

使用持久化上下文的步骤:

  1. 从EntityManagerFactory获得EntityManager。此EntityManager对应一个新的持久化上下文。
  2. 开始事务。此时实体实例会进入managed状态,被持久化上下文管理。
  3. 进行实体操作(CRUD)。实体操作会同步到数据库。
  4. 提交或回滚事务。此时会更新或清空持久化上下文。事务结束,实体变为detached状态。
  5. 关闭EntityManager。释放持久化上下文。

代码示例:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("exampleUnit");
EntityManager em = emf.createEntityManager();

// 新建持久化上下文
// 开始事务
em.getTransaction().begin();  

// 实体操作 
User user = new User();  
em.persist(user);  
// user 为 managed 状态  

// 提交事务  
em.getTransaction().commit();
// user 变为 detached 状态

// 关闭 EntityManager  
em.close();  
// 释放持久化上下文