Grails with Cache-Ehcache插件 - 二级缓存

时间:2014-01-22 06:47:43

标签: hibernate caching grails ehcache

我正在尝试使用grails的cache-ehcache插件,这似乎很容易设置和使用! 但是,如果我正确阅读文档后应该工作并返回缓存结果:

DataSource.groovy中:

hibernate {
  cache.use_second_level_cache = true
  cache.use_query_cache = true
  cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}

Config.groovy中:

grails.cache.config = {
  domain {
    name 'com.mycompany.User'
  }
}

MyClass的:

User.findByMyField("myVal", [cache:true])

但除非我在User.groovy中添加以下内容,否则它对我无效

static mapping = {
    cache true
}

我的印象是, User 的更改不是必需的,因为这是Config.groovy中定义的“域{}”块,但是如果没有它,我就无法让它工作。

我真的想避免修改User.class,因为它在我不想受影响的多个项目中使用!

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:1)

DSL中的domain方法只是一个别名,可以使配置更直观,但它不会影响域类是否被缓存,只是它在启用时如何缓存。您仍然需要使用cache.use_second_level_cache = true启用整体缓存,并在域类中配置缓存。

Hibernate中的二级缓存是基于接口的,大多数实际工作都是由您选择的实现完成的。所以你需要在Hibernate中启动,并且GORM使用cache块中的mapping方法来执行此操作,但是您需要执行特定于实现的配置来调整缓存,这是您需要直接或间接使用Ehcache API的地方,例如通过这个DSL。