Grails withCriteria查询中eq和==之间的差异

时间:2013-05-21 07:58:44

标签: grails

我想从我的数据库中获取与给定项目相关的所有要求(在本例中为currentProject) 我刚用两种方法来做这件事

第一个:

Requirement.withCriteria {....
    eq("project", currentProject)
    ...
}

我注意到这个查询不使用Project类的equals方法,但是这个查询正确地返回了我想要的内容。

第二

Requirement.withCriteria {
    ....        
    currentProject == property('Project')
    ...
}

此查询使用equals方法来比较两个项目,但我无法覆盖equals方法,即抛出异常,说“grails无法将hibernateBuild强制转换为域”

所以,我想知道这两个查询之间的区别是什么?

感谢所有人!

1 个答案:

答案 0 :(得分:2)

withCriteria方法进入数据库以获取您的实体。

在数据库级别上没有equals的概念(DB对Java没有任何了解)。第一个查询为您提供了正确的结果,因为它比较了DB映射(PRIMARY / FOREIGN键)。

至于第二个查询 - 我不建议使用它。如果它使用equals,则它将所有项目从DB提取到内存中。这是一个非常糟糕的主意。