【问题标题】:How to set default behaviour to Grails' Criteria?如何将默认行为设置为 Grails 的标准?
【发布时间】:2014-02-27 01:34:33
【问题描述】:

我想做的是设置:

setReadOnly(true)

默认对每个条件查询。

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

附: 我可能还想添加以下作为标准默认值,但不确定它们是否会对 setReadOnly 产生任何额外影响:

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

【问题讨论】:

    标签: hibernate grails criteria


    【解决方案1】:

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

    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了解更多信息

    【讨论】:

    • 谢谢(我实际上已经阅读了您所指的页面),但这确实解决了问题。我需要为应用程序中的所有条件查询设置只读为 true,我希望这样做而不需要遍历每个单独的查询,因为它们有数十甚至数百个。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多