黑马程序员技术交流社区

标题: 哪位大神能够告诉我什么是hibernate的自动脏检查: [打印本页]

作者: jb15721401391    时间: 2015-7-7 19:31
标题: 哪位大神能够告诉我什么是hibernate的自动脏检查:


作者: 莫名12301    时间: 2015-7-7 19:31


Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。
作者: jb15721401391    时间: 2015-7-7 21:33
有人回答么?
作者: Crisps    时间: 2015-7-8 09:56
       当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。
作者: 小绿    时间: 2015-7-8 23:28
一个数据对象的信息发生改变之后的状态; 当事务提交时,Hibernate会对session中的PO进行检测,判断是那些属性发生了变化,并将发生变化的数据更新到数据库中;
作者: zhwfa1991    时间: 2015-7-9 14:24
观摩大神解决
作者: llo    时间: 2015-7-9 21:02
就和你登陆时候Session 会记住这个账号和密码  当你通过修改密码时候 密码发生变化   然后它会和数据库中的登陆密码比较  不一样后会  发生不一样的返回比较 就相当跳转到登陆界面实现  的例子差不多 我是这样理解的
作者: A等待着    时间: 2015-7-10 19:15
每次装载一个对象到内存时,session始终跟踪它的修改。于是每次对数据的查询,session都将跌代所有的session中的对象并检查脏数据,将脏数据flush到数据库。Hibernate这样做的良苦用心是为了确保在执行查询之前所有可能影响查询的变化都被提交到数据库。这对零星数据量的应用来讲,不足为言。但面对数千个对象和千余次的查询来讲,它将使性能的真正杀手。
       了解真相后,我们可以使用session.setFlushMode(FlushMode.NEVER)语句将在查询时不需脏检查的数据标识脏数据,这样Hibernate无处不在的代理机制将被“欺骗”,直接将它添加到脏数据列表(列表中的数据不会被flush到数据库)中,这样“杀手”就会因无处遁形而自动消失了。
       在一个session中读取、查询大量数据对象情况下的制胜武器- FlushMode.NEVER。当然要记住,在此过程中你不可以修改这些数据,不然就真的把数据“搞脏”了。
作者: 陈祖杰    时间: 2015-7-16 00:11
水水水           
作者: 加多宝    时间: 2015-7-18 18:40
当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。
作者: 午夜码农    时间: 2015-7-22 22:44
实际工作中,hibernate缓存公司都够呛能配,更别提这个框架了,如果公司用了,那只能说明公司有钱,人性。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2