何时/如何以编程方式设置Hibernate大小使用的Ehcache

Pau*_*lor 6 hibernate ehcache hibernate-4.x

我通过添加以下内容在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");
Run Code Online (Sandbox Code Playgroud)

到我的Hibernate配置.

这到我的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>
Run Code Online (Sandbox Code Playgroud)

这到我要缓存的类

@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
Run Code Online (Sandbox Code Playgroud)

但是如何在创建数据库时在代码中配置缓存大小,对我来说使用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);
}
Run Code Online (Sandbox Code Playgroud)

但是我怎么能影响它们的创建方式,或者像我所做的那样修改值就足以更新了.当我运行时,我看到没有调试outout或任何表明正在使用缓存的东西.

mar*_*rux 1

您可以子类化org.hibernate.cache.ehcache.EhCacheRegionFactory并手动执行任何缓存配置,然后告诉 Hibernate 使用您的自定义缓存工厂:

Configuration.setProperty("hibernate.cache.region.factory_class", "my.cache.FactoryClass");
Run Code Online (Sandbox Code Playgroud)

请参阅:http ://www.ehcache.org/documentation/2.7/integrations/hibernate.html#set-the-hibernate-cache-provider-programmatically-