本文讲一下 Hibernate 中对象的三种状态:
1. Transient(瞬时态)
- 定义:刚创建出来、还没被 Hibernate 关联(Session管理)的对象。
- 特点:数据库里还没有对应的记录,Hibernate也不认识它。
- 例子:
User user = new User(); user.setName("Tom"); // 此时 user 是瞬时态
- 注意:如果程序结束、对象丢失,不会有任何数据库操作。
2. Persistent(持久态)
- 定义:对象被 Hibernate 的
Session
管理,代表数据库中已有或即将有对应数据。 - 特点:对象的任何改变,Hibernate 会自动同步到数据库(在事务提交时)。
- 例子:
session.save(user); // 现在 user 变成持久态
- 注意:只要对象在 Session 里,就是持久态,不需要手动 update,只要事务提交时 Hibernate 会检测变化。
3. Detached(游离态)
- 定义:对象曾经是持久态,但现在脱离了 Session 管理。
- 特点:对象还是存在的,但是 Hibernate 不会再自动同步它了。
- 例子:
session.close(); // 或 session.evict(user); // user 就变成了游离态
- 注意:如果要重新管理这个对象,需要用
session.update(user)
或session.merge(user)
。
总结小口诀(方便记忆):
- 新建对象是 瞬时态(Transient)
save()
之后是 持久态(Persistent)close()
或evict()
后是 游离态(Detached)