2012-03-17 9 views
2

Ehcacheをhibernate.cfg.xmlに、ehcache.xmlをehcache.xmlに、第2レベルのキャッシュを設定しました。マッピングファイルのcache-usageプロパティを設定します。チェックデータは、そのないloaded.Its再度query.Iコード第2レベルのキャッシュが設定されていて、データが第2レベルのキャッシュからロードされていません

<hibernate-configuration> 
<session-factory> 
    <property name="connection.username">pension2</property> 
    <property name="connection.password">pension2</property> 
    <property name="connection.url">jdbc:oracle:thin:@191.161.0.25:1521:pension</property> 
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <property name="dialect">org.hibernate.dialect.OracleDialect</property> 
    <property name="myeclipse.connection.profile">pension</property> 
    <property name="show_sql">true</property> 
    <property name="format_sql">true</property> 
    <property name="use_sql_comments">true</property> 

    <property name="hibernate.cache.use_second_level_cache">true</property> 
    <property name="hibernate.generate_statistics">true</property> 
    <property name="hibernate.cache.region.provider_class"> 
     net.sf.ehcache.hibernate.EhCacheProvider</property> 
    <property name="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml </property>  
    <mapping resource="com/aims/mapping/Teacher.hbm.xml" /> 
    <mapping resource="com/aims/mapping/Student.hbm.xml" /> 
    <mapping resource="com/aims/mapping/Student_marks_detl.hbm.xml" /> 
    <mapping resource="com/aims/mapping/User.hbm.xml" /> 

</session-factory> 
</hibernate-configuration> 

ehcache.xml

<ehcache> 
    <diskStore path="java.io.tmpdir"/> 
    <cache name="com.aims.beans.Teacher" 
    maxElementsInMemory="300" 
    eternal="false" 
    overflowToDisk="false"/> 
    </ehcache> 
01述べ実行hibenrate statices.Butを使用してキャッシュまたはデータベースからロードされます

Mapping.xml

<hibernate-mapping> 
<class name="com.aims.beans.Teacher" table="teacher"> 
<cache usage="read-write" /> 
<id name="tno" column="tno" type="java.lang.Integer" > 
    <generator class="assigned" /> 
</id> 
<property name="tname" type="java.lang.String" column="tname"/> 
</class> 
</hibernate-mapping> 

私はからCreateQueryを使用して、私のjsp.So、Iamの中で教師のリストをロードしようとsetCacheableは本当です。

long oldHitCount = HibernateUtil.getHitCount();
long oldMissCount = HibernateUtil.getMissCount();
log.info( "oldHitCount" + oldHitCount + "oldMissCount" + oldMissCount); クエリq = session.createQuery( "教師から"); q.setCacheable(true);
list = q.list(); long newHitCount = HibernateUtil.getHitCount();
long newMissCount = HibernateUtil.getMissCount();

HibernateUtil.getHitCount()/ HibernateUtil.getMissCount()コード

public static long getHitCount() { 
     long hitcount = 0; 
     hitcount = sessionFactory.getStatistics() 
       .getSecondLevelCacheStatistics("com.aims.beans.Teacher") 
       .getHitCount(); 
     return hitcount; 
    } 

    public static long getMissCount() { 
     long miscount = 0; 
     miscount = sessionFactory.getStatistics() 
       .getSecondLevelCacheStatistics("com.aims.beans.Teacher") 
       .getMissCount(); 
     return miscount; 
    } 

しかし、すべての時間がcreateQuery.I構成され、そこcache.Is間違いから返されていないその理由はすべてのものを実行します2番目のレベルのキャッシュを設定してください。私を助けてください>?

答えて

1

第2レベルのキャッシュはidをエンティティにマップするため、エンティティがidによって照会された場合にのみ使用されます。クエリキャッシュは、クエリを、クエリによって検索されたエンティティIDのセットにマッピングする。したがって、第2レベルのキャッシュとクエリキャッシュは、実際に一緒に使用される場合にのみ役立ちます。

<property name="hibernate.cache.use_query_cache">true</property> 

・ホープ、このことができます:クエリキャッシュ可能を設定するのに十分ではないですが、また、あなたの休止状態session-factory構成でクエリキャッシュを有効にする必要がありますクエリキャッシュを有効にするには

関連する問題