Настроенный кэш второго уровня и данные не загружаются из кэша второго уровня - PullRequest
2 голосов
/ 17 марта 2012

Я настроил кэш второго уровня, используя Ehcache в hibernate.cfg.xml, ehcache.xml. используя hibenrate statices. Но он не загружен. Он снова выполняет запрос. Я упомянул код

<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>

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>

Я пытаюсь загрузить список учителей в свой jsp. Итак, я использую createquery и setCacheable - true.

long oldHitCount = HibernateUtil.getHitCount ();
long oldMissCount = HibernateUtil.getMissCount ();
log.info ("oldHitCount" + oldHitCount + "oldMissCount" + oldMissCount); Query q = session.createQuery ("from Teacher"); q.setCacheable (истина);
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. Я настроил и все, почему он не вернулся из кеша. Есть ли какая-либо ошибка при настройке кеша второго уровня.

1 Ответ

1 голос
/ 17 марта 2012

Кэш второго уровня отображает идентификаторы на сущности, поэтому он используется только тогда, когда сущности запрашиваются по идентификатору. Кэш запросов отображает запросы на набор идентификаторов сущностей, полученных запросом. Таким образом, кэш второго уровня и кэш запросов на самом деле полезны только при совместном использовании.

Чтобы включить кеш запросов, недостаточно установить кеширование запросов, но вы также должны включить кеш запросов в конфигурации Hibernate session-factory:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...