Hibernate教程-Hibernate 生命周期
![](https://wx.javatiku.cn/j/j301-t.jpg)
在 Hibernate 中,我们可以创建一个实体对象并将其保存到数据库中,或从数据库中获取一个实体的数据。每个实体都与其生命周期相关联,实体对象在生命周期的不同阶段中流转。
Hibernate 生命周期包含以下状态:
- 瞬时状态(Transient state)
- 持久化状态(Persistent state)
- 游离状态(Detached state)
瞬时状态
- 瞬时状态是对象的初始状态。
- 一旦我们创建了 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);