Hibernate持久化对象的状态(1)
2016-07-31 15:32
211 查看
站在持久化的角度,Hibernate 把对象分为 4 种状态:持久化状态,临时状态,游离状态,删除状态。首先让我们来解释一下什么几个名词。
1,什么是持久化对象:
session具有一个缓存,位于缓存中的对象称为持久化对象,他和数据库中的相关记录对应。
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection。Session 能够在某些时间点, 按照缓存中对象的变化来执行相关的 SQL 语句,来同步更新数据库,
来flush。
2,session接口
session接口 是hibernate向应用程序提供的操作数据库的主要接口。它提供了基本的保存、更新、删除和加载java对象的方法。Session 接口实现中包含一系列的java集合,这些java集合构成了session缓存,只要session实例没有结束生命周期,存放在他缓存中的对象就不会结束生命周期。
3.持久化对象的状态
站在持久化的角度,Hibernate 把对象分为 4 种状态: 持久化状态, 临时状态, 游离状态, 删除状态。
(1)临时对象(Transient):
• 在使用代理主键的情况下, OID通常为 null
• 不处于 Session 的缓存中
• 在数据库中没有对应的记录
• eg:临时员工,在公司里没有托管信息和员工后,
(2)持久化对象(也叫”托管”)(Persist):
• OID 不为 null
• 位于 Session 缓存中
• 若在数据库中已经有和其对应的记录,持久化对象和数据库中的相关记录对应
• Session 在flush 缓存时, 会根据持久化对象的属性变化, 来同步更新数据库
• 在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化象。即一条记录对应两个持久化对象,不让就不知道是以哪一个持久化对象来更新。
• eg:正式员工,需要让公司来监管。
(3)删除对象(Removed)
• 在数据库中没有和其 OID 对应的记录
• 不再处于 Session 缓存中
• 一般情况下, 应用程序不该再使用被删除的对象
• eg:被开除的员工。
(4)游离对象(也叫”脱管”) (Detached):
• OID 不为 null
• 不再处于 Session 缓存中
• 一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录
• eg:你是公司的员工,请产假了,这段时间不受公司的管理。但是有你的员工号。
4• 对象的状态转换图
Session 的特定方法能使对象从一个状态转换到另一个状态。这些方法就是我们常用的。
1,什么是持久化对象:
session具有一个缓存,位于缓存中的对象称为持久化对象,他和数据库中的相关记录对应。
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection。Session 能够在某些时间点, 按照缓存中对象的变化来执行相关的 SQL 语句,来同步更新数据库,
来flush。
2,session接口
session接口 是hibernate向应用程序提供的操作数据库的主要接口。它提供了基本的保存、更新、删除和加载java对象的方法。Session 接口实现中包含一系列的java集合,这些java集合构成了session缓存,只要session实例没有结束生命周期,存放在他缓存中的对象就不会结束生命周期。
3.持久化对象的状态
站在持久化的角度,Hibernate 把对象分为 4 种状态: 持久化状态, 临时状态, 游离状态, 删除状态。
(1)临时对象(Transient):
• 在使用代理主键的情况下, OID通常为 null
• 不处于 Session 的缓存中
• 在数据库中没有对应的记录
• eg:临时员工,在公司里没有托管信息和员工后,
(2)持久化对象(也叫”托管”)(Persist):
• OID 不为 null
• 位于 Session 缓存中
• 若在数据库中已经有和其对应的记录,持久化对象和数据库中的相关记录对应
• Session 在flush 缓存时, 会根据持久化对象的属性变化, 来同步更新数据库
• 在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化象。即一条记录对应两个持久化对象,不让就不知道是以哪一个持久化对象来更新。
• eg:正式员工,需要让公司来监管。
(3)删除对象(Removed)
• 在数据库中没有和其 OID 对应的记录
• 不再处于 Session 缓存中
• 一般情况下, 应用程序不该再使用被删除的对象
• eg:被开除的员工。
(4)游离对象(也叫”脱管”) (Detached):
• OID 不为 null
• 不再处于 Session 缓存中
• 一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录
• eg:你是公司的员工,请产假了,这段时间不受公司的管理。但是有你的员工号。
4• 对象的状态转换图
Session 的特定方法能使对象从一个状态转换到另一个状态。这些方法就是我们常用的。
相关文章推荐
- Hibernate3---持久化对象的状态
- hibernate常用的接口和持久化对象的状态变化
- Hibernate的三种状态和Hibernate持久化对象的写法
- Hibernate学习笔记 - Hibernate中持久化对象的状态转换规则
- hibernate持久化对象状态
- Hibernate之持久化对象的三种状态
- 1.测试持久化对象的状态:对象,com/bjpowernode/hibernate/User.hbm.xml
- Hibernate持久化对象的三种状态
- hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态 .
- Hibernate持久化对象的状态
- hibernate持久化对象状态
- Hibernate 持久化对象的状态
- Hibernate持久化对象的三种状态
- 亲,hibernate持久化对象的状态图全面解析!
- Hibernate持久化对象的三种状态
- hibernate持久化对象状态 .
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
- Hibernate持久化对象的三种状态
- 2.测试持久化对象的状态:把hbm转化为DDL,Hibernate连接数据库工具类