我有一个简单的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类中编写一个命名查询。我尝试了以下查询
hasGenre {cl ->
'book.genre.title' in cl
}
传递一个string列表,如下所示
Author.hasGenre(genereTitleStringArray)
但这似乎不起作用。我还有其他一些直接的命名查询,它们工作得很好。因此,当我检索包括"hasGenere",这似乎并不影响检索。我做错了什么?我对这个领域还不熟悉
Thanks in advance
您是否一直在使用list()方法?如果没有,您必须使用它从namedQuery获取您的实体,因为namedQuery返回NamedCriteriaProxy.Class:
author = Author.hasGenre(genereTitleStringArray).list()
对我来说,这样的代码工作得很好,在我的作者我有:
static namedQueries = {
hasGenre { cl->
'book.genres.title' in cl
}
}
预订相同的。你还必须添加依赖项1 - 1(如果你还没有):
static belongsTo = [book: Book]
或一对多:
static hasMany= [book: Book]
对我来说,当前的代码运行良好,祝你好运。
注:我使用的是grails 2.3.11
正确的语法应该是
static namedQueries = {
hasGenre {genreName ->
book{
genres {
eq 'title' genreName
}
}
}
}