本文讲一下 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)