Я использую JPA и Hibernate для базы данных. Я настроил (EHCacache) кэш второго уровня и кэш уровня запросов, но просто для того, чтобы убедиться, что кэширование работает, я пытался получить статистику, которая выдает исключение приведения класса. Любая помощь будет высоко оценена. Моя главная цель - увидеть все объекты, которые были кэшированы, чтобы убедиться, что кэширование работает правильно.
Вот код:
public List<CodeValue> findByCodetype(String propertyName) {
try {
final String queryString = "select model from CodeValue model where model.codetype"
+ "= :propertyValue" + " order by model.code";
Query query = em.createQuery(queryString);
query.setHint("org.hibernate.cacheable", true);
query.setHint("org.hibernate.cacheRegion", "query.findByCodetype");
query.setParameter("propertyValue", propertyName);
List resultList = query.getResultList();
org.hibernate.Session session = (Session) em.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
Map cacheEntries = sessionFactory.getStatistics()
.getSecondLevelCacheStatistics("query.findByCodetype")
.getEntries();
logger.info("The statistics are: " + cacheEntries);
return resultList;
} catch (RuntimeException re) {
logger.error("findByCodetype failed in trauma patient", re);
throw re;
}
}
Ошибка существует, когда я пытаюсь распечатать статистику.
Ниже приведено исключение:
[6/7/10 19:23:17:059 GMT] 00000034 SystemOut O java.lang.ClassCastException: org.hibernate.cache.QueryKey incompatible with org.hibernate.cache.CacheKey
at org.hibernate.stat.SecondLevelCacheStatistics.getEntries(SecondLevelCacheStatistics.java:51)
at com.idph.trauma.registry.service.TraumaPatientDAO.findByCodetype(TraumaPatientDAO.java:439)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy209.findByCodetype(Unknown Source)
Вы знаете, что происходит?