關於部落格
換個方向思考反而能更真切的看出事物的真實與本質
  • 65509

    累積人氣

  • 2

    今日人氣

    0

    訂閱人氣

[Hibernate][Ehcache] Hibernate的二級快取設定


1.首先就是到 hibernate.cfg.xml 裡設定,由於我的Hibernate是大於v3.3的,所以設定上要用 hibernate.cache.region.factory_class ,部分設定如下: 


        <property name="hibernate.cache.region.factory_class">
            net.sf.ehcache.hibernate.EhCacheRegionFactory
        </property>
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_query_cache">true</property>


要注意一下用以上的設定也要確認一下你的 Ehcache 版本是否有 net.sf.ehcache.hibernate.EhCacheRegionFactory 這個類,因為比較舊的版本是沒有的。

2.接著在 Classpath 下新增 ehcache.xml 設定檔

<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        />
    
    <cache name="org.hibernate.cache.StandardQueryCache"
           maxElementsInMemory="500"
           eternal="false"
           timeToLiveSeconds="120"
           overflowToDisk="true"/>
 
    <cache name="org.hibernate.cache.UpdateTimestampsCache"
           maxElementsInMemory="5000"
           eternal="false"
           overflowToDisk="true"/>
</ehcache>

在上面我另外加了 org.hibernate.cache.StandardQueryCache 及 org.hibernate.cache.UpdateTimestampsCache 的設定,其實不設也沒關係,他自己會吃預設的,只是若不設的話就會有訊息出來而已!
 
3.Cache設定,用 Annotation 的設定如下:

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)


若是 hbm 的話,用像這樣的:

<cache usage="read-write" />

4.對於Query Cache的部分在查詢前要對 Query 物件加 setCacheable(true) 即可,例如:

Query query = session.createQuery(hql);
query.setCacheable(true);

若為 Spring 的 HibernateTemplate 的話,那就是:

getHibernateTemplate().setCacheQueries(true);
getHibernateTemplate().find(hql);

這樣就行了!
相簿設定
標籤設定
相簿狀態