﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java路，自己走-文章分类-java.hibernate</title><link>http://www.blogjava.net/syniii/category/47094.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 19 Nov 2010 06:29:52 GMT</lastBuildDate><pubDate>Fri, 19 Nov 2010 06:29:52 GMT</pubDate><ttl>60</ttl><item><title>Hibernate的二级缓存策略</title><link>http://www.blogjava.net/syniii/articles/338462.html</link><dc:creator>杨罗罗</dc:creator><author>杨罗罗</author><pubDate>Fri, 19 Nov 2010 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/syniii/articles/338462.html</guid><wfw:comment>http://www.blogjava.net/syniii/comments/338462.html</wfw:comment><comments>http://www.blogjava.net/syniii/articles/338462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/syniii/comments/commentRss/338462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/syniii/services/trackbacks/338462.html</trackback:ping><description><![CDATA[Hibernate的二级缓存策略的一般过程如下： <br />
<br />
　　1) 条件查询的时候，总是发出一条select * from table_name where &#8230;. （选择所有字段）这样的SQL语句查询数据库，一次获得所有的数据对象。 <br />
<br />
　　2) 把获得的所有数据对象根据ID放入到第二级缓存中。 <br />
<br />
　　3) 当Hibernate根据ID访问数据对象的时候，首先从Session一级缓存中查；查不到，如果配置了二级缓存，那么从二级缓存中查；查不到，再查询数据库，把结果按照ID放入到缓存。 <br />
<br />
　　4) 删除、更新、增加数据的时候，同时更新缓存。 <br />
<br />
　　Hibernate的二级缓存策略，是针对于ID查询的缓存策略，对于条件查询则毫无作用。为此，Hibernate提供了针对条件查询的Query缓存。 <br />
<br />
　　Hibernate的Query缓存策略的过程如下： <br />
<br />
　　1) Hibernate首先根据这些信息组成一个Query Key，Query Key包括条件查询的请求一般信息：SQL, SQL需要的参数，记录范围（起始位置rowStart，最大记录个数maxRows)，等。 <br />
<br />
　　2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在，那么返回这个结果列表；如果不存在，查询数据库，获取结果列表，把整个结果列表根据Query Key放入到Query缓存中。 <br />
<br />
　　3) Query Key中的SQL涉及到一些表名，如果这些表的任何数据发生修改、删除、增加等操作，这些相关的Query Key都要从缓存中清空。
 <img src ="http://www.blogjava.net/syniii/aggbug/338462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/syniii/" target="_blank">杨罗罗</a> 2010-11-19 11:33 <a href="http://www.blogjava.net/syniii/articles/338462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>