我通过添加以下内容在 Hibernate 4.3.11 中启用了二级缓存:
config.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
config.setProperty("hibernate.cache.use_second_level_cache", "true");
到我的休眠配置。
这是我的 pom.xml (不确定 pom 定义是否有必要这么尴尬)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.3.11.Final</version>
<exclusions>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.7.0</version>
</dependency>
这是我想要缓存的类
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
但是,在创建数据库时如何在代码中配置缓存大小,对于我来说使用 Xml 文件并不实际,因为它只会增加构建过程的复杂性,而我更喜欢在代码中执行此操作。
更新,从 Hibernate 创建数据库后,我发现缓存已经创建
CacheManager.create();
String[] cacheNames = CacheManager.getInstance().getCacheNames();
for(String cacheName:cacheNames)
{
MainWindow.logger.severe("CacheName:"+cacheName);
Cache cache = CacheManager.getInstance().getCache(cacheName);
cache.getCacheConfiguration().setMaxEntriesInCache(1000);
cache.getCacheConfiguration().setLogging(true);
}
但是我如何影响它们的创建方式或者像我所做的那样修改值是否足以更新。当我运行时,我没有看到任何调试输出或任何表明正在使用缓存的内容。