Hibernate Grails查找具有多对多关系的域对象,并使用列表作为参数

Hibernate Grails查找具有多对多关系的域对象,并使用列表作为参数,hibernate,grails,gorm,criteria,grails-2.0,Hibernate,Grails,Gorm,Criteria,Grails 2.0,我有一首简单的课堂歌曲,我可以为它添加一些标签: class Song { String title static hasMany = [tags:Tag] } 然后,我希望能够找到所有具有给定标签列表的歌曲,例如: List<Song> results = Song.findAll("where tags contains ?", [myTagList]); 我使用包含T1、T2、T3的myTagList执行查询,然后调用将返回S2和S4 有没有有效的方法来执行

我有一首简单的课堂歌曲,我可以为它添加一些标签:

class Song {
    String title
    static hasMany = [tags:Tag]
}
然后,我希望能够找到所有具有给定标签列表的歌曲,例如:

List<Song> results = Song.findAll("where tags contains ?", [myTagList]);
我使用包含T1、T2、T3的
myTagList执行查询,然后调用将返回
S2和S4


有没有有效的方法来执行此操作?

应该可以将条件与“in”查询一起使用:


动态查找器怎么样

List<Song> results = Song.findAllByTagsInList(myTagList);
List results=Song.findAllByTagsInList(myTagList);

您知道这个电话的复杂性吗?例如,如果我的base中有数千首歌曲,我希望避免打电话获取整个歌曲列表,然后迭代它们以查找匹配项。很抱歉回复太慢,我一直在尝试做更多的研究,但这应该会向您返回标签匹配的歌曲列表,使用不使用任何grails迭代的sql in语句。您尝试过您的解决方案吗?也许我做错了什么,但我试着站在我这边,但显然不起作用。我们期望的是一个简单的类属性(不应该是列表)作为第一个参数,以及一个我们希望在其中找到该属性的列表。在我的例子中,情况正好相反(我希望“标记”包含myTagList),两个参数中都有列表。Grails文档中的示例:“in”(“age”,[18..65])很抱歉,我想我误解了您的意图,听起来您想将列(标记)列表与值列表进行比较,对吗?对不起,我不知道有什么简单的方法可以做到这一点。是的,我基本上在寻找的是一个包含给定列表所有标签的歌曲列表。我更新了我的问题以使其更清楚。它适用于简单的参数,如Song.findallbyttleinList([“title1”,“title2”]),但当我使用findAllByTagsInList调用它时,它会崩溃:“Class:java.sql.SQLException,Message:No-specified-value-specified-for-parameter 1”
Song.createCriteria().list{
    "in"("tags",myTagList)
}
List<Song> results = Song.findAllByTagsInList(myTagList);