Grails 命名查询 - 按关联查找

Posted

技术标签:

【中文标题】Grails 命名查询 - 按关联查找【英文标题】:Grails named query - find by association 【发布时间】:2015-01-23 14:02:14 【问题描述】:

我想创建一个命名查询,它将根据子类属性的一个(或多个属性)查找一个类的所有对象。

我希望能够找到 Foo.me == "some string" 的所有 Bars

所以,我有这个,但它不起作用:

class Foo 
    String me


class Bar 
    Foo foo

    static namedQueries = 
        findByFooMe  meStr ->
            eq(foo.me, meStr)
        
    

请问正确的语法是什么样的?另外,如果 Bar hasMany Foos,它会如何变化,并且我想找到其 Foo,me 属性之一是“搜索字符串”的所有 Bars?

class Bar 
    static hasMany [foos: Foo]
 

【问题讨论】:

我会接受@Joshua 的回答,但您也可以使用eq('foo.me', meStr) 作为您现在所遇到问题的小修改。 @dmahapatro 谢谢,这也很有帮助。 【参考方案1】:

虽然我不建议使用 findBy 作为命名查询的前缀,但您已经接近正确的实现了。这是一个更新版本,也为查询使用了新名称。

static namedQueries = 
    locateByFooMe  meStr ->
        foo 
          eq('me', meStr)
        
    

如果您将您的关系更改为一个集合(一对多),只需确保属性名称 foo(在这种情况下)更改为您将其更改为的任何内容(您的问题中为foos),上述查询将仍在继续工作。

【讨论】:

以上是关于Grails 命名查询 - 按关联查找的主要内容,如果未能解决你的问题,请参考以下文章

Grails 命名查询

Grails:按名称查找域类

如何在 grails 命名查询中编写“不存在”查询?

命名查询中的 Grails GORM 计数函数

grails 命名查询返回不正确的数据

Grails GORM 查询以匹配多个关联对象