我正在尝试使用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,因为它在我不想受影响的多个项目中使用!
任何建议都将不胜感激!
答案 0 :(得分:1)
DSL中的domain
方法只是一个别名,可以使配置更直观,但它不会影响域类是否被缓存,只是它在启用时如何缓存。您仍然需要使用cache.use_second_level_cache = true
启用整体缓存,并在域类中配置缓存。
Hibernate中的二级缓存是基于接口的,大多数实际工作都是由您选择的实现完成的。所以你需要在Hibernate中启动,并且GORM使用cache
块中的mapping
方法来执行此操作,但是您需要执行特定于实现的配置来调整缓存,这是您需要直接或间接使用Ehcache API的地方,例如通过这个DSL。