框架是spring+hibernate,配置了二级缓存;
第一种方法二级缓存生效:直接调用session。
第二种方法二级缓存无效:使用hibernateTemplate。
方法1:(调用两次以下方法,第二次没有打印sql)
s = sessionFactory.openSession();
tx = s.beginTransaction();
log.info("1 try to load application dsg.");
ApplicationDSG adsg = (ApplicationDSG) s.get(ApplicationDSG.class, appDSGId);
log.info(" --application dsg:" + adsg.toString());
方法2:使用hibernateTemplate
hibernateTemplate.setCacheQueries(true);
ApplicationDSG adsg1 = hibernateTemplate.get(ApplicationDSG.class, appDSGId);
Application a1 = adsg1.getApplication();
a1.getApplicationName();
ApplicationDSG adsg2 = hibernateTemplate.get(ApplicationDSG.class, appDSGId);
Application a2 = adsg2.getApplication();
a2.getApplicationName();
System.out.println(hibernateTemplate.getQueryCacheRegion());
Statistics statistics = sessionFactory.getStatistics();
System.out.println(statistics);
System.out.println("放入" + statistics.getSecondLevelCachePutCount());
System.out.println("命中" + statistics.getSecondLevelCacheHitCount());
System.out.println("错过" + statistics.getSecondLevelCacheMissCount());
hibernateTemplate 在xml中生成:
<!-- hibernate template -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
<property name="cacheQueries">
<value>${hibernate.template.cacheQueries}</value>
</property>
</bean>
方法1,2中的sessionFactory是一个。 问题不在这方面。
有没有知道这个是什么原因的?希望给与解答。