标签:ict 免费 config 适用于 sql语句 merge 使用 维护 解决
6.主键查询
7.Hibernate中java对象的三种状态
Hibernate框架通过Session来管理Java对象的状态
Session管理后,对象就处于游离状态。 Session提供两个方法(update() merge())将处于游离状态的对象与一个新的Session发生关联
对象与Session关联:
瞬时状态转换为持久状态
使用Session对象的save()或saveOrUpdate()方法保存对象后,该对象的状态由瞬时状态转换为持久状态9.脏检查和刷新缓存
实现:flush()、commit()
Session是Hibernate向应用程序提供的操纵数据库的主要接口,它提供了基本的保存、更新、删除和加载Java对象的方法。Session具有一个缓存,可以管理和跟踪所有持久化对象,对象和数据库中的相关记录对应。在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对象包含的编号数据更新到数据库中,这一过程称为刷新缓存,换句话说就是将Session缓存同步刷新为与数据库一致。
脏检查
在Hibernate中,状态前后发生变化的对象,称为脏对象。当事务提交时,Hibernate会对Session中持久状态的对象进行检测,判断对象的数据时候发生了改变,这种判断称为脏检查。
Hibernate为什么要进行脏检查呢?
因为如果对象发生了改变,就需要将改变更新到数据库中,以确保内存中的对象与数据库中的数据保持一致。
Session是如何进行脏检查的呢?
当一个Dept对象被加入到Session缓存中时,Session会为Dept对象的值类型的属性复制一份快照。当Session刷新缓存是,会先进行脏检查,即比较Dept对象的当前属性与它的快照,来判断Dept对象的属性是否发生了变化。如果发生了变化,Session会根据脏对象的最新属性值来执行相关的SQL语句,将变化更新到数据库中。
刷新缓存机制
当Session缓存中对象的属性每次发生变化时,Session并不会立即刷新缓存和执行相关的SQL语句,而是在特定的时间点才刷新缓存。这使得Session能够把几条相关的SQL语句合并为一条或者一批SQL语句,减少了访问数据库的次数,从而提高应用程序的数据访问性能。
Session在何时刷新缓存呢?
当应用程序调用Transcation的commit()方法时,commit()方法先调用Session的刷新缓存方法flush(),然后向数据库提交事务。Hibernate之所以把刷新缓存时间点安排在事务快结束时,一方面是因为可以减少访问数据库的频率,林一方面是因为可以尽可能缩短当前事务对数据库中相关资源的锁定时间。
当应用程序显示调用Session的flush()方法时,刷新缓存。
Session的flush()方法和Transaction的commit()方法的区别?
flush()方法进行刷新缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务。提交事务意味着对数据库所做的更新被永久保存下来。
标签:ict 免费 config 适用于 sql语句 merge 使用 维护 解决
原文地址:http://www.cnblogs.com/QQW-HH/p/7641829.html