A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币

最佳答案

查看完整内容

Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。 ...

点评

请尽快设置最佳答案。  发表于 2015-7-13 10:00

11 个回复

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


Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马