在 Hibernate 中,我们可以创建一个实体对象并将其保存到数据库中,或从数据库中获取一个实体的数据。每个实体都与其生命周期相关联,实体对象在生命周期的不同阶段中流转。

Hibernate 生命周期包含以下状态:

  • 瞬时状态(Transient state)
  • 持久化状态(Persistent state)
  • 游离状态(Detached state)

3-1.png

瞬时状态

  • 瞬时状态是对象的初始状态。
  • 一旦我们创建了 POJO 类的实例,对象就进入了瞬时状态。
  • 在此状态下,对象未与 Session 关联。因此,瞬时状态不涉及任何数据库。
  • 因此,对数据的修改不会对数据库产生任何影响。
  • 瞬时对象存在于堆内存中,它们独立于 Hibernate。
Employee e = new Employee(); // 这里,对象进入瞬时状态。
e.setId(101);
e.setFirstName("Gaurav");
e.setLastName("Chawla");

持久化状态

  • 一旦对象与 Session 关联,它就进入了持久化状态。
  • 因此,我们可以说当我们保存或持久化对象时,它处于持久化状态。
  • 在此状态下,每个对象代表数据库表的一行。
  • 因此,对数据的修改会在数据库中产生变化。

我们可以使用以下任何方法进入持久化状态:

session.save(e);
session.persist(e);
session.update(e);
session.saveOrUpdate(e);
session.lock(e);
session.merge(e);

游离状态

  • 一旦我们关闭 Session 或清除其缓存,对象就进入游离状态。
  • 由于对象不再与 Session 关联,对数据的修改不会对数据库产生任何影响。
  • 然而,游离对象仍然在数据库中有表示。
  • 如果我们希望持久化对游离对象所做的更改,则需要将该对象重新连接到有效的 Hibernate session。
  • 要将游离对象与新的 Hibernate session 关联,可以在新的 session 上使用 load()、merge()、refresh()、update() 或 save() 方法,引用游离对象。

我们可以使用以下任何方法进入游离状态:

session.close();
session.clear();
session.detach(e);
session.evict(e);

标签: Hibernate, Hibernate教程, Hibernate框架, Hibernate框架设计, Hibernate初级教程, Hibernate框架用法, Hibernate指南, Hibernate入门, Hibernate中级教程, Hibernate进阶教程, Hibernate高级教程, Hibernate下载