如何将默认行为设置为Grails的标准?

时间:2014-02-03 14:10:11

标签: hibernate grails criteria

我想做的是设置:

setReadOnly(true)
默认情况下

到每个条件查询。

是否可以定义将应用于在应用程序中执行的每个条件查询的默认设置?

P.S。 我可能还希望将以下内容添加为条件默认值,但我不确定它们是否会对setReadOnly产生任何其他影响:

setCacheMode(CacheMode.IGNORE)
setFlushMode(FlushMode.MANUAL)

1 个答案:

答案 0 :(得分:2)

做了一些挖掘并为你找到了这个:

http://www.javacodegeeks.com/2012/10/stuff-i-learned-from-grails-consulting.html

read方法的一个限制是它仅适用于由id单独加载的实例。但是还有其他方法会影响多个实例。一种是将整个会话设为只读:

1   session.defaultReadOnly = true

现在所有加载的实例都将默认为只读,例如来自条件查询和查找程序的实例。

访问会话的便捷方法是在任意域类上使用withSession方法:

1   SomeDomainClass.withSession { session ->
2      session.defaultReadOnly = true
3   }

但是整个会话很少是只读的。您可以使用setReadOnly方法将单个条件查询的结果设置为只读:

1   def c = Account.createCriteria()
2   def results = c {
3      between('balance', 500, 1000)
4      eq('branch', 'London')
5      maxResults(10)
6      setReadOnly true
7   }

此技术的一个重要限制是附加集合不受拥有实例的只读状态的影响(并且似乎没有办法配置集合以忽略每个实例的更改)

Hibernate documentation

中详细了解相关信息