在 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 查询未经测试,但可以给您一些想法