1

全部, 是否可以在我的持久性xml文件中禁用二级缓存? 我有一个使用ehcache的Spring + Hibernate + JPA配置。在我的persistence.xml文件我有这样的条目:如何在persistence.xml文件中禁用ehcache

<property name="hibernate.cache.use_second_level_cache" value="false"/> 

但是这似乎并没有工作,我仍然看到加载实体的数量不断增加,我的应用程序运行。我拿这个统计数据:

EntityManagerFactoryInfo emfi = (EntityManagerFactoryInfo) entityManagerFactory; 
EntityManagerFactory emf = emfi.getNativeEntityManagerFactory(); 
EntityManagerFactoryImpl empImpl = (EntityManagerFactoryImpl)emf; 
log.debug(empImpl.getSessionFactory().getStatistics()); 

请大家帮忙。

+0

你在看哪些统计数据?因为这个属性应该做你想做的事情,并且加载的实体的数量与二级缓存无关。查看统计中以getSecondLevelCache开始的所有方法 –

+0

我正在查看这些统计信息:“实体已加载= 30” – Ayusman

+1

加载的实体数量是会话中加载的实体数量,即第一级缓存。 –

回答

3

您正在查看的统计信息是Hibernate会话缓存(第一级缓存)。您的二级缓存(ehcache)已禁用。你遇到的是正常的行为。

编辑:

当ehcache的启用,你会发现像日志条目:

[#|...|INFO|sun-appserver2.1|org.hibernate.cfg.SettingsFactory|...|Second-level cache: enabled|#] 
[#|...|INFO|sun-appserver2.1|org.hibernate.cfg.SettingsFactory|...|Cache provider: org.hibernate.cache.EhCacheProvider|#] 

(只要你启用日志记录,包 - 缓存提供商可能会有所不同如说不定net.sf.ehcache.hibernate.EhCacheRegionFactory - 不知道你用什么)

+0

是否有任何表明ehcache被禁用的日志?我如何确认ehcache实际上是禁用的,我如何找到从ehcahce提供的实体而不是hibernate的第一级缓存? – Ayusman

+0

@Ayusman:添加有关ehcache日志的信息;因为JB Nizet建议您也可以查看从empImpl.getSessionFactory()获得的'Statistics'对象的getSecondLevelCache *()方法getStatistics()' – jeha

相关问题