Hibernate 中持久化实体的状态是 ORM 框架的核心概念,用于描述实体对象与数据库记录及 Session 之间的关联关系。根据搜索结果,Hibernate 实体状态主要分为以下三种(部分资料提到四种状态,但主流分类为三种):
一、三种核心状态定义
-
瞬时状态(Transient)
- 特征:
- 对象通过
new
创建,无持久化标识(OID),未被 Session 管理; - 数据库无对应记录,JVM 回收后对象消失。
- 对象通过
- 示例:
User user = new User(); // 瞬时态对象
- 特征:
-
持久状态(Persistent)
- 特征:
- 对象已通过
save()
/persist()
绑定 Session,拥有 OID; - 数据库存在对应记录,且 Session 会跟踪其变更(自动同步到数据库)。
- 对象已通过
- 自动更新机制:
修改持久态对象属性后,Hibernate 通过脏检查(Dirty Checking)在事务提交时自动更新数据库。
- 特征:
-
游离状态(Detached)
- 特征:
- 曾为持久态,但因 Session 关闭或调用
evict()
/clear()
而脱离管理; - 保留 OID,但变更不再自动同步到数据库。
- 曾为持久态,但因 Session 关闭或调用
- 示例:
session.close(); // 原持久态对象转为游离态
- 特征:
二、状态转换方法
转换方向 | 触发方法 | 说明 |
---|---|---|
瞬时态 → 持久态 | session.save() 或 session.persist() |
save() 立即分配 OID,persist() 延迟到事务提交。 |
持久态 → 游离态 | session.close()</ |