【发布时间】:2014-02-27 01:34:33
【问题描述】:
我想做的是设置:
setReadOnly(true)
默认对每个条件查询。
是否可以定义将应用于应用程序中执行的每个条件查询的默认设置?
附: 我可能还想添加以下作为标准默认值,但不确定它们是否会对 setReadOnly 产生任何额外影响:
setCacheMode(CacheMode.IGNORE)
setFlushMode(FlushMode.MANUAL)
【问题讨论】:
我想做的是设置:
setReadOnly(true)
默认对每个条件查询。
是否可以定义将应用于应用程序中执行的每个条件查询的默认设置?
附: 我可能还想添加以下作为标准默认值,但不确定它们是否会对 setReadOnly 产生任何额外影响:
setCacheMode(CacheMode.IGNORE)
setFlushMode(FlushMode.MANUAL)
【问题讨论】:
做了一些挖掘并为你找到了这个:
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了解更多信息
【讨论】: