框架的三种状态

瞬时状态(Transient)

通过new创建对象后,对象并没有立刻持久,他并没有与数据库打交道,此时状态为瞬时状态。

持久状态(Persistent)

当对象与session关联,被Session管理时,它处于持久状态,处于持久状态的对象拥有数据库标识,有两种方法通过Session

get()方法,或者是load()方法重数据加载数据的时候,第二种瞬时状态,Session的save()方法或SaveorUpdate()方法时,Java对象与Session发生关系。

对于处于持久状态的对象,Session会持续跟踪和管理,如果Hibernate会选择合适的时机(处理提交时)。

游离状态(Detached)

处于持久状态的对象,脱离于其关系的Session的管理后,对象处于游离状态,处于这种状态,Hibernate无法保证对象所包含的数据库的记录一致,因为Hibernate

已经不能做任何操作。Session提供了两个方法(update()merge())。

1.瞬时状态转为持久状态

使用Session对象save()或saveOrUpdate()方法保存对象后。

使用Session对象的get()或load()方法获取对象,该对象的状态是持久状态。

2.持久状态为瞬时状态

执行Session对象的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时对象没有任何数据库数据关联。

3.持久状态为游离状态

执行了Session对象的evict(),clear()或close()方法,对象由原来的持久化转为游离状态。

4.游离状态转为持久状态

重新获取Session对象,执行Session对象的update()或saveOrUpdate()方法,对 象游离状态转为持久状态,该对象再次与Session对象相关联。

5.游离状态转为瞬时状态

执行Session对象的delete()方法,对象游离状态转为瞬时状态。

处于瞬时状态或游离状态的对象不在被其他对象引用时,会被Java虚拟机按照垃圾回收机制处理。

 

脏查询及刷新缓存机制

在Hibernate中,状态前后发生变化的对象,称为脏对象。

当事物提交时,Hibernate会对Session中持久状态的对象进行检测,判断对象的数据是否发生改变,这就称为脏检查。

当Session刷新缓存时,会进行脏检查,即比较Dept对象的当前的值类型的属性复制一份快照。

tx=session.beginTransaction();

//获取部门对象,Dept对象处于持久状态。

Dept dept=(Dept)Session.load(Dept.class,new Byte("11"));

dept.setDname("质管部“);

tx.comit();

刷新缓存机制

1.当应用程序调用Transaction的commit()方法时commit()方法先调用session的刷新缓存方法flush(),然后再向数据库提交事务。

2.当应用程序显示调用Session的flush()方法时,刷新缓存。

Session的flush()方法和Transaction的commit()方法区别:flush()方法进行刷新缓存操作,执行一系列的sql语句,但不会提交事务;commit()方法先调用flush()方法,然后提交事务。

提交事务意味着对数据库 所做的更新被永久保存下来。

 

posted @ 2017-01-10 17:47  时间&煮雨  阅读(193)  评论(0编辑  收藏  举报