您的位置:首页 > 其它

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 的特定方法能使对象从一个状态转换到另一个状态。这些方法就是我们常用的。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hibernate