在 hasMany 关系中创建条件多个项目
CreateCriteria multiple items in a hasMany relationship
以下不适用于搜索多个标签:
def tags = "1,2,3".split(",")
def results = Item.createCriteria().list() {
itemTags {
and {
tags.each { tag ->
like("name", tag)
}
}
}
}
但如果我将 and 更改为 or.
,它似乎确实有效
编辑: 在我的调试中我发现标准是:
(itemTags_alias1.name=1 and itemTags_alias1.name=2 and itemTags_alias1.name=3)
这不是我的目标。我想检查一个项目是否具有所有三个标签。
我不知道你是否可以对这种情况有一个标准,但你应该能够编写类似于下面的 hql
Item.executeQuery("select i from Item i join i.itemTags tags where tags.name in (:names) group by i having count(i) >= :count", [names:nameList, count: nameList.size()])
看到这个 question - 您将了解如何在 sql 中完成此操作,因此您可以将其转换为 hql
注意:上面的 hql 查询未经测试,但可以给您一些想法
以下不适用于搜索多个标签:
def tags = "1,2,3".split(",")
def results = Item.createCriteria().list() {
itemTags {
and {
tags.each { tag ->
like("name", tag)
}
}
}
}
但如果我将 and 更改为 or.
,它似乎确实有效编辑: 在我的调试中我发现标准是:
(itemTags_alias1.name=1 and itemTags_alias1.name=2 and itemTags_alias1.name=3)
这不是我的目标。我想检查一个项目是否具有所有三个标签。
我不知道你是否可以对这种情况有一个标准,但你应该能够编写类似于下面的 hql
Item.executeQuery("select i from Item i join i.itemTags tags where tags.name in (:names) group by i having count(i) >= :count", [names:nameList, count: nameList.size()])
看到这个 question - 您将了解如何在 sql 中完成此操作,因此您可以将其转换为 hql
注意:上面的 hql 查询未经测试,但可以给您一些想法