Hibernate对象管理机制

在hibernate中对象有三种状态:瞬时态或自由态(transient)、持久化态(persistent)、托管态或游离态(detached)
(1).三态简介:
◆transient:瞬态或者自由态   (例如new Person("张三")
1.该po通过new等方式创建
2.该po的实例和session没有关联,不在session中缓存
3.该po在数据库中没有对应的记录

◆persistent:持久化状态  例如通过get和load等得到的对象
1.该po通过get、load等方法从数据库中取出并转化成对象
2.该po与session中的实例关联,在session中缓存
3.该po在数据库中有对应的记录

◆detached:脱管状态或者游离态
1.该po通过session的close、clear或者evict(obj)方法从持久态变化得到
2.该po的实例和session没有关联,不在session中缓存
3.该po在数据库中有对应的记录(前提是没有其他session删除此记录)
4.通过delete(obj)但不能执行事务(在一个事务中),也可以得到游离态的po,因delete而变成游离态可以通过save或saveOrUpdate()变成持久态。

(2)hibernate常用方法简介
◆update方法
  1.操作的对象:自由态或脱管状态(因session的关闭而处于脱管状态)的对象
  2.作用:将对象变为持久态(更新到数据库中)
  3.触发方式:手动调用

◆flush方法
  1.操作的对象:持久态对象(po)
  2.作用:将对象更新到数据库中
  3.触发方式:
     a.手动调用
     b.session的关闭、SessionFactory关闭,自动调用
     c.get()一个对象,把对象的属性进行改变,把资源关闭,自动调用
     d.transaction commit的时候,自动调用
     e.transaction commit的时候,自动调用

◆lock方法
  1.操作的对象:没有更改过的 脱管状态的对象(针对的是因Session的关闭而处于脱管状态的po对象,不能针对因delete而处于脱管状态的po对象)
  2.作用:将对象变为持久化状态,等待flush方法将其更新到数据库
  3.触发方式:手动调用

◆clear方法
  1.操作的对象:session缓存
  2.作用:完整的清除session缓存
  3.触发方式:手动调用

◆evcit(obj)方法
  1.操作的对象:某个持久化对象
  2.作用:把某个持久化对象从session的缓存中清空
  3.触发方式:手动调用


注意:在实际业务中经常需要从数据库取到一个对象,并将其进行处理,编码或解码某些属性进行其他操作,这时如果对象处于持久态,会在session关闭时同步到数据库中,而我们不想更改数据库中数据的状态,这时有两个方法解决:
1.new一个自由态的对象,拷贝原对象的属性(主键id)除外,使用new处理的新对象进行操作。
2.将对象从session中清空(evict(obj)方法),使其变为detached托管态,再进行操作。

你可能感兴趣的:(Hibernate)