2

在我的 grails 应用程序中,我的某些域类永远不会被用户更改。

但是,有时需要进行一些维护工作,并且管理员应该能够不时创建/编辑一些实例(假设一年两次)。

我想为这些域类()设置一个只读的二级缓存策略,static mapping = { cache usage: 'read-only' }并且我希望能够“禁用”(在非常特殊的情况下)只读策略,以便通过 Grails 脚手架更新某些实例编辑视图。

是否可以?你建议我怎么做?

编辑:我正在实施的解决方案是 Pascal 和 Burt 答案的混合(见评论)。这两个答案都很棒而且很有帮助。所以我在选择接受的答案时遇到了难题!无论如何,谢谢你。

4

2 回答 2

3

这可能是可能的,但很可能不是微不足道的。我会使用 groovy.sql.Sql 直接插入。你失去了验证,但你可以创建实例并验证它们,但不能调用 save()。如果没问题,然后执行 SQL 插入,例如

def thing = new Thing(params)
if (thing.validate()) {
   new Sql(dataSource).executeInsert(
             "insert into thing(name) values(?)", [params.name])
}
else {
   // report validation error
}
于 2010-02-10T23:14:54.047 回答
3

我将使用纯 SQL对给定实体执行更新,然后对 2nd 级缓存进行所需的evict()方法调用SessionFactory以从二级缓存中删除特定实体。请注意,您可能还必须使用evictCollection(). 查看这篇不错的博客文章,了解有关驱逐的详细信息。

Encapsulate all this in services (e.g. wipeBooksFromGlobalCache()) than admins can call in the very particular situations you are mentioning.

于 2010-02-10T23:31:20.657 回答