【问题标题】:Grails named query - find by associationGrails 命名查询 - 按关联查找
【发布时间】:2023-04-02 17:06:01
【问题描述】:

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

我希望能够找到 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 谢谢,这也很有帮助。

标签: grails associations named-query


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2015-07-28
    • 2012-09-06
    相关资源
    最近更新 更多