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 及其功能。
我有以下 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 及其功能。