JPA中的持久化上下文(Persistence Context)是EntityManager管理的实体实例集合。它包含以下作用:
- 缓存实体数据。可以提供实体的一级缓存,避免频繁访问数据库。
- 管理实体的生命周期(transient、persistent、detached、removed)。
- 与当前事务相关联。事务提交或回滚会同步更新或清空持久化上下文。
- 定义实体操作的边界。在同一持久化上下文中进行的实体操作会同步到数据库。
使用持久化上下文的步骤:
- 从EntityManagerFactory获得EntityManager。此EntityManager对应一个新的持久化上下文。
- 开始事务。此时实体实例会进入managed状态,被持久化上下文管理。
- 进行实体操作(CRUD)。实体操作会同步到数据库。
- 提交或回滚事务。此时会更新或清空持久化上下文。事务结束,实体变为detached状态。
- 关闭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();
// 释放持久化上下文