在Hibernate中, 要么创建实体的对象并将其保存到数据库中, 要么从数据库中获取实体的数据。在这里, 每个实体都与生命周期相关联。实体对象经过生命周期的不同阶段。
Hibernate生命周期包含以下状态:-
- 暂态
- 持续状态
- 分离状态
文章图片
暂态
- 过渡状态是对象的初始状态。
- 一旦我们创建了POJO类的实例, 则该对象将进入瞬态状态。
- 在这里, 对象不与会话相关联。因此, 过渡状态与任何数据库都不相关。
- 因此, 对数据的修改不会影响数据库中的任何更改。
- 临时对象存在于堆内存中。它们独立于Hibernate。
Employee e=new Employee();
//Here, object enters in the transient state.
e.setId(101);
e.setFirstName("Gaurav");
e.setLastName("Chawla");
持续状态
- 与该会话关联的对象一经进入持久状态。
- 因此, 可以说当我们保存或持久化对象时, 该对象处于持久状态。
- 在这里, 每个对象代表数据库表的行。
- 因此, 对数据的修改会在数据库中进行更改。
session.save(e);
session.persist(e);
session.update(e);
session.saveOrUpdate(e);
session.lock(e);
session.merge(e);
分离状态
- 一旦我们关闭会话或清除其缓存, 对象就进入分离状态。
- 由于对象不再与会话相关联, 因此对数据的修改不会影响数据库中的任何更改。
- 但是, 分离的对象在数据库中仍然具有表示形式。
- 如果我们要保留对分离对象所做的更改, 则需要将应用程序重新附加到有效的Hibernate会话。
- 要将分离的对象与新的Hibernate会话相关联, 请在具有分离对象的引用的新会话上使用以下任何方法-load(), merge(), refresh(), update()或save()。
session.close();
session.clear();
session.detach(e);
session.evict(e);
推荐阅读
- 使用注解Hibernate多对多示例
- Hibernate配置
- Hibernate和Struts 2集成
- Hibernate和Spring集成
- HCQL(Hibernate标准查询语言)
- Hibernate组件映射
- Hibernate中的集合映射
- Hibernate中的缓存
- Hibernate双向关联