字符串列表的 Grails 域命名查询

Grails domain Named query for a list of string

我有一个简单的 Grails 应用程序。我有如下域名

class Author implements Serializable {
   ....
   static hasMany = [
        book : Book 
   ]
}

class Book implements Serializable{

   Author author
   Genres genres
   static belongsTo = [author: Author , genre: Genres ]
   static mapping = {
    .....
       author lazy: false
   }
}

class Genres implements Serializable{

    String title

}

现在我有一个要求,我有一个流派标题列表,我需要检索所有至少拥有其中一种流派的一本书的作者。我需要在 Author class 中编写命名查询。我尝试了以下查询

hasGenre {cl ->
    'book.genre.title' in cl
}

我传递了一个字符串列表如下

 Author.hasGenre(genereTitleStringArray)

但这似乎不起作用。我还有其他一些简单的 named-queries,效果很好。因此,当我检索包括 "hasGenere" 时,这似乎并不影响检索。我究竟做错了什么?我对这个领域很陌生

提前致谢

正确的语法是

 static namedQueries = {
       hasGenre {genreName -> 
                book{
                   genres {  
                       eq 'title' genreName 
               } 
           }
       }
   }

你用过list()方法吗?如果不是,则必须使用它从 namedQuery 获取实体,因为 namedQuery return NamedCriteriaProxy.Class:

author = Author.hasGenre(genereTitleStringArray).list()

对我来说这样的代码运行良好,在我的作者中我有:

static namedQueries = {
    hasGenre { cl->
        'book.genres.title' in cl
    }
}

预订相同。关于流派,您还必须一对一地添加依赖项(如果没有):

 static belongsTo = [book: Book]

或一对多:

static hasMany= [book: Book]

对我来说,当前代码运行良好,祝你好运。

P.S。 我正在使用 grails 2.3.11