标签:comm 改变 nbsp use 回收 java虚拟机 ant style 操作
java对象的三种状态
持久态:
Student stu=new Student()
Session.save(stu);
Session以及数据库都有
游离态:
stu.setId(1);
Session.close();
Session没有 数据库中有
瞬时态:
Student stu=new Student()
体现:在Session中以及DB都没有
三种状态图:
使用new关键字构建对象,该对象的状态是瞬时状态。
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虚拟机按照垃圾回收机制处理。
下面是关于脏检查
什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。
脏检查:当事务提交时,Hiberante会对Session中持久状态的对象进行检测,判断对象的数据是否发生了改变
缓存清理机制
当Session缓存中对象的属性每次发生了变化,Session并不会立即清理缓存和执行相关的SQL update语句,而是在特定的时间点才清理缓存,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,一遍减少访问数据库的次数,从而提高应用程序的数据访问性能。
在默认情况下,Session会在以下时间点清理缓存。
更新数据的方法:
update()方法
saveOrUpdate()方法
merge(u)方法:
User u=new User();
User ul=(User)session.merge(u);
1.返回一个object类型,返回的对象类型ul会被session关联变成持久对象
2.调用此方法后u这个对象之后修改的数据不会写入到数据库中
3.而操作返回的持久化对象ul他的数据会写入到数据库中)
标签:comm 改变 nbsp use 回收 java虚拟机 ant style 操作
原文地址:http://www.cnblogs.com/panpanpan/p/6073152.html