﻿<?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-Programming on the fly-随笔分类-21.Hibernate</title><link>http://www.blogjava.net/Werther/category/39066.html</link><description>Live as if you were to die tomorrow. Learn as if you were to live forever.
</description><language>zh-cn</language><lastBuildDate>Wed, 24 Jun 2009 20:58:03 GMT</lastBuildDate><pubDate>Wed, 24 Jun 2009 20:58:03 GMT</pubDate><ttl>60</ttl><item><title>优化Hibernate性能的几点建议</title><link>http://www.blogjava.net/Werther/archive/2009/06/24/283970.html</link><dc:creator>Werther</dc:creator><author>Werther</author><pubDate>Wed, 24 Jun 2009 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/Werther/archive/2009/06/24/283970.html</guid><wfw:comment>http://www.blogjava.net/Werther/comments/283970.html</wfw:comment><comments>http://www.blogjava.net/Werther/archive/2009/06/24/283970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Werther/comments/commentRss/283970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Werther/services/trackbacks/283970.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 针对Oracle数据库而言，Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数，一般设置为30、50、100.Oracle数据库的JDBC驱动默认的Fetch Size=15，设置Fetch Size设置为：30、50，性能会有明显提升，如果继续增大，超出100，性能提升不明显，反而会消耗内存。 &nbsp;&nbsp;<a href='http://www.blogjava.net/Werther/archive/2009/06/24/283970.html'>阅读全文</a><img src ="http://www.blogjava.net/Werther/aggbug/283970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Werther/" target="_blank">Werther</a> 2009-06-24 17:08 <a href="http://www.blogjava.net/Werther/archive/2009/06/24/283970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中二级缓存的配置和使用 </title><link>http://www.blogjava.net/Werther/archive/2009/06/23/283789.html</link><dc:creator>Werther</dc:creator><author>Werther</author><pubDate>Tue, 23 Jun 2009 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/Werther/archive/2009/06/23/283789.html</guid><wfw:comment>http://www.blogjava.net/Werther/comments/283789.html</wfw:comment><comments>http://www.blogjava.net/Werther/archive/2009/06/23/283789.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Werther/comments/commentRss/283789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Werther/services/trackbacks/283789.html</trackback:ping><description><![CDATA[<p><strong>(一）Hibernate的二级缓存策略的一般过程如下：</strong><br />
<br />
1) 条件查询的时候，总是发出一条select * from table_name where &#8230;. （选择所有字段）这样的SQL语句查询数据库，一次获得所有的数据对象。 </p>
<p>2) 把获得的所有数据对象根据ID放入到第二级缓存中。 </p>
<p>3) 当Hibernate根据ID访问数据对象的时候，首先从Session一级缓存中查；查不到，如果配置了二级缓存，那么从二级缓存中查；查不到，再查询数据库，把结果按照ID放入到缓存。 </p>
<p>4) 删除、更新、增加数据的时候，同时更新缓存。<br />
<br />
Hibernate的二级缓存策略，是针对于ID查询的缓存策略，对于条件查询则毫无作用。为此，Hibernate提供了针对条件查询的Query Cache。 </p>
<p><strong>（二）什么样的数据适合存放到第二级缓存中？</strong> </p>
<p>1 很少被修改的数据 </p>
<p>2 不是很重要的数据，允许出现偶尔并发的数据 </p>
<p>3 不会被并发访问的数据 </p>
<p>4 参考数据,指的是供应用参考的常量数据，它的实例数目有限，它的实例会被许多其他类的实例引用，实例极少或者从来不会被修改。</p>
<p><strong>（三）不适合存放到第二级缓存的数据？</strong> </p>
<p>1 经常被修改的数据 </p>
<p>2 财务数据，绝对不允许出现并发 </p>
<p>3 与其他应用共享的数据。 </p>
<p>实践部分： </p>
<p><strong>使用EhCache配置二级缓存</strong>：<br />
<br />
配置准备：<br />
<br />
1)把ehcache-1.2.3.jar加入到当前应用的classpath中。 </p>
<p>2)在hibernate.cfg.xml文件中加入EhCache缓存插件的提供类。 </p>
<pre>
<ol class="dp-xml">
    <li class="alt"><span twffan="done"><span class="comments" twffan="done">&lt;!--配置缓存插件&nbsp;--&gt;</span><span twffan="done">&nbsp; &nbsp;</span></span>
    <li><span class="tag" twffan="done">&lt;</span><span class="tag-name" twffan="done">property</span><span twffan="done">&nbsp;</span><span class="attribute" twffan="done">name</span><span twffan="done">=</span><span class="attribute-value" twffan="done">"hibernate.cache.provider_class"</span><span class="tag" twffan="done">&gt;</span><span twffan="done">&nbsp; &nbsp;</span>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;org.hibernate.cache.EhCacheProvider&nbsp; &nbsp;</span>
    <li><span class="tag" twffan="done">&lt;/</span><span class="tag-name" twffan="done">property</span><span class="tag" twffan="done">&gt;</span><span twffan="done">&nbsp;&nbsp;</span></li>
</ol>
</pre>
<p>3)挎贝ehcache.xml文件到类路径(项目工程的src目录下)，这个文件在Hibernate安装目录的etc下。<br />
<br />
配置步骤：<br />
<br />
Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中，&lt;class&gt;和&lt;set&gt;元素都有一个&lt;cache&gt;子元素，这个子元素用来配置二级缓存。 <br />
示例：以category(产品类别)和product(产品)的映射为例： </p>
<p>1) 修改要配置缓存的那个持久化类的对象关系映射文件： </p>
<p>Category.hbm.xml </p>
<p>
<table style="border-right: #cccccc 1px solid; table-layout: fixed; border-top: #cccccc 1px solid; border-left: #cccccc 1px solid; width: 95%; border-bottom: #cccccc 1px solid" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;&nbsp;&nbsp; </p>
            <p>&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"&nbsp;&nbsp; <br />
            "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>"&gt;&nbsp;&nbsp; <br />
            &lt;hibernate-mapping&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;class name="org.qiujy.domain.cachedemo.Category" table="categories"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!—&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置缓存,必须紧跟在class元素后面&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对缓存中的Category对象采用读写型的并发访问策略&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache usage="read-write"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id" type="java.lang.Long"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="id" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 配置版本号,必须紧跟在id元素后面 --&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version name="version" column="version" type="java.lang.Long" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" type="java.lang.String"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="name" length="32" not-null="true"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" type="java.lang.String"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="description" length="255"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set name="products" table="products" cascade="all" inverse="true"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Hibernate只会缓存对象的简单属性的值,&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要缓存集合属性,必须在集合元素中也加入&lt;cache&gt;子元素&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而Hibernate仅仅是把与当前持久对象关联的对象的OID存放到缓存中。&nbsp;&nbsp; <br />
            如果希望把整个关联的对象的所有数据都存入缓存,&nbsp;&nbsp; <br />
            则要在相应关联的对象的映射文件中配置&lt;cache&gt;元素&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache usage="read-write"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key column="categoryId" not-null="true"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="org.qiujy.domain.cachedemo.Product"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;/class&gt;&nbsp;&nbsp; <br />
            &lt;/hibernate-mapping&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<span twffan="done"></p>
</span>
<p>Product.hbm.xml </p>
<p>
<table style="border-right: #cccccc 1px solid; table-layout: fixed; border-top: #cccccc 1px solid; border-left: #cccccc 1px solid; width: 95%; border-bottom: #cccccc 1px solid" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">&lt;?xml version="1.0" encoding="utf-8"?&gt;&nbsp;&nbsp; <br />
            &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"&nbsp;&nbsp; <br />
            "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>"&gt;&nbsp;&nbsp; <br />
            &lt;hibernate-mapping&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;class name="org.qiujy.domain.cachedemo.Product" table="products"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache usage="read-write"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id" type="java.lang.Long"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="id" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 配置版本号,必须紧跟在id元素后面 --&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version name="version" column="version" type="java.lang.Long" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" type="java.lang.String"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="name" length="32" not-null="true"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" type="java.lang.String"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="description" length="255"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="unitCost" type="java.lang.Double"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="unitCost" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="pubTime" type="java.util.Date"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="pubTime" not-null="true" /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;many-to-one name="category"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column="categoryId"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.qiujy.domain.cachedemo.Category"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cascade="save-update"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not-null="true"&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/many-to-one&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;/class&gt;&nbsp;&nbsp; <br />
            &lt;/hibernate-mapping&gt;</td>
        </tr>
    </tbody>
</table>
</p>
<p>2)编辑ehcache.xml文件：</p>
<div>
<table style="border-right: #cccccc 1px solid; table-layout: fixed; border-top: #cccccc 1px solid; border-left: #cccccc 1px solid; width: 95%; border-bottom: #cccccc 1px solid" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">&lt;ehcache&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;diskStore path="c:\\ehcache\"/&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;defaultCache&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxElementsInMemory="10000"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal="false"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds="120"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds="120"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk="true"&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;!-- 设置Category类的缓存的数据过期策略 --&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;cache name="org.qiujy.domain.cachedemo.Category"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxElementsInMemory="100"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal="true"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds="0"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds="0"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk="false"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 设置Category类的products集合的缓存的数据过期策略 --&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;cache name="org.qiujy.domain.cachedemo.Category.products"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxElementsInMemory="500"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal="false"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds="300"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds="600"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk="true"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;cache name="org.qiujy.domain.cachedemo.Product"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxElementsInMemory="500"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal="false"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds="300"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds="600"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk="true"&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &lt;/ehcache&gt;</td>
        </tr>
    </tbody>
</table>
</div>
<p>在Spring托管的Hibernate中使用二级缓存 1．在spring的配置文件中，hibernate部分加入 xml 代码
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
2.为HBM表设置cache策略 xml 代码 <cache usage="nonstrict-read-write"  />３.在DAO中，调用find方法查询之前，设置使用缓存 Java代码 getHibernateTemplate().setCacheQueries(true); 补充： 如果不设置&#8220;查询缓存&#8221;，那么hibernate只会缓存使用load()方法获得的单个持久化对象，如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话，就需要设置 hibernate.cache.use_query_cache true 才行。</p>
<img src ="http://www.blogjava.net/Werther/aggbug/283789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Werther/" target="_blank">Werther</a> 2009-06-23 17:32 <a href="http://www.blogjava.net/Werther/archive/2009/06/23/283789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的乐观锁与悲观锁（转载） </title><link>http://www.blogjava.net/Werther/archive/2009/06/22/283616.html</link><dc:creator>Werther</dc:creator><author>Werther</author><pubDate>Mon, 22 Jun 2009 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/Werther/archive/2009/06/22/283616.html</guid><wfw:comment>http://www.blogjava.net/Werther/comments/283616.html</wfw:comment><comments>http://www.blogjava.net/Werther/archive/2009/06/22/283616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Werther/comments/commentRss/283616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Werther/services/trackbacks/283616.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 业务逻辑的实现过程中，往往需要保证数据访问的排他性。如在金融系统的日终结算处理中，我们希望针对某个 cut-off 时间点的数据进行处理，而不希望在结算进行过程中（可能是几秒种，也可能是几个小时），数据再发生变化。此时，我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改，这样的机制，在这里，也就是所谓的 “锁” ，即给我们选定的目标数据上锁，使其无法被其他程序修改。Hibernate 支持两种锁机制：即通常所说的 “悲观锁（ Pessimistic Locking ）”和 “乐观锁（ Optimistic Locking ）”&nbsp;&nbsp;<a href='http://www.blogjava.net/Werther/archive/2009/06/22/283616.html'>阅读全文</a><img src ="http://www.blogjava.net/Werther/aggbug/283616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Werther/" target="_blank">Werther</a> 2009-06-22 17:25 <a href="http://www.blogjava.net/Werther/archive/2009/06/22/283616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate的11大优势 </title><link>http://www.blogjava.net/Werther/archive/2009/06/18/283091.html</link><dc:creator>Werther</dc:creator><author>Werther</author><pubDate>Thu, 18 Jun 2009 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/Werther/archive/2009/06/18/283091.html</guid><wfw:comment>http://www.blogjava.net/Werther/comments/283091.html</wfw:comment><comments>http://www.blogjava.net/Werther/archive/2009/06/18/283091.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.blogjava.net/Werther/comments/commentRss/283091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Werther/services/trackbacks/283091.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:   Hibernate在解决性能问题方面做得非常好。有了它的缓存机制，使用第三方缓存和数据库连接池，就较好的解决的性能问题。但这些还不够，hibernate给了开发者足够的自由，让开发者自己去控制性能问题。 &nbsp;&nbsp;<a href='http://www.blogjava.net/Werther/archive/2009/06/18/283091.html'>阅读全文</a><img src ="http://www.blogjava.net/Werther/aggbug/283091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Werther/" target="_blank">Werther</a> 2009-06-18 17:21 <a href="http://www.blogjava.net/Werther/archive/2009/06/18/283091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>