【问题标题】:Grails Where Queries: expand DetachedCriteria in method does not workGrails Where Queries:在方法中展开 DetachedCriteria 不起作用
【发布时间】:2014-07-11 15:24:35
【问题描述】:

我创建了一个新的 Grails 项目,只有:

TestDomain.class:

class TestDomain {

    String var1
    String var2

}

Bootstrap.groovy:

def init = { servletContext ->
    if (TestDomain.count() == 0) {
        new TestDomain(var1: "a", var2: "b").save()
        new TestDomain(var1: "a", var2: "c").save() 
    }
}

TestController.groovy:

def index() {
    def detachedCriteria = TestDomain.where { var1 == "a" }
    detachedCriteria = detachedCriteria.where { var2 == "b" }
    render detachedCriteria.list()
}


def indexWithMethod() {
    def detachedCriteria = TestDomain.where { var1 == "a" }
    detachedCriteria = addClause(detachedCriteria)
    render detachedCriteria.list()
}

def addClause(detachedCriteria) {
    detachedCriteria = detachedCriteria.where { var2 == "b" }
    return detachedCriteria
}

调用 index 仅返回 1 个实例(如预期的那样),但 indexWithMethod 会返回两个实例元素。为什么 indexWithMethod 不等于 index?

我使用的是 Grails 2.4.2,但这也发生在 2.3.6 中。

【问题讨论】:

  • 如果您将addClause 方法的参数静态键入为grails.gorm.DetachedCriteria,这样可以吗?
  • 这与您的问题无关,但您不应在控制器中定义像 def addClause(detachedCriteria) 这样的方法,因为编译器会将其视为控制器操作,而事实并非如此。你应该用protected addClause(detachedCriteria) 来定义它。只有公共方法被转换为操作。
  • 不,静态键入返回类型没有帮助,如果我将参数设为静态类型也无济于事。
  • (哦,是的,我知道我应该将内部方法设为私有(或受保护?为什么不私有?),但这只是我制作的一个示例项目:))

标签: grails grails-orm where composition detachedcriteria


【解决方案1】:

这是 Grails 和 GORM 中的一个错误 https://github.com/grails/grails-data-mapping/issues/982

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多