Grails "deep" 条件 + 一对多关系

Grails "deep" criteria + one-to-many relation

我有以下 table 结构:

Task - (has one) - mandate
Mandate - (has many) - mandateContacts (of type Contact)
Contact

当然,Hibernate 创建了一个名为 mandate_contact 的 table,它将这些联系人链接到任务。

我必须写一个标准,从 Task table 开始,听起来应该像这样:

Fetch a task if one of the contacts associated to a mandate has a specific name.

到目前为止,我创建的别名如下:

createAlias('mandate', 'mnd', CriteriaSpecification.LEFT_JOIN)

这很简单,使用 criteria builder:

def results = Task.createCiteria().list() {
  mandate {
    mandateContacts {
      eq('name', 'whatever value you want to match')
    }
  }
}

以上假定您的 Task 域 class 具有 Mandate 域 class 类型的 mandate 属性。 Mandate 有一个名为 mandateContacts 的集合,它是 Contact 域 class 的集合,Contact 域 class 有一个 属性 称为 name,您要与之匹配。

我建议您阅读我链接到的文档以了解 createCriteria 及其功能。