我有一个简单的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
}
现在我有一个要求,我有一个Genres标题列表,我需要检索所有在其中一个类型中至少有一本书的作者。我需要在Author类中编写一个命名查询。我尝试了以下查询
hasGenre {cl ->
'book.genre.title' in cl
}
我传递一个字符串列表如下
Author.hasGenre(genereTitleStringArray)
但这似乎不起作用。我有一些其他直截了当的命名查询工作正常。因此,当我检索包括" hasGenere"这似乎不会影响检索。我究竟做错了什么?我对这个领域很陌生
提前致谢
答案 0 :(得分:1)
您是否一直在使用 list()方法?如果不是,则必须使用它来从namedQuery获取实体,因为namedQuery返回 NamedCriteriaProxy.Class :
author = Author.hasGenre(genereTitleStringArray).list()
对我来说,这样的代码运作良好,在我的作者中我有:
static namedQueries = {
hasGenre { cl->
'book.genres.title' in cl
}
}
预订相同。那么Genres你还必须添加依赖一对一(如果你还没有):
static belongsTo = [book: Book]
或一对多:
static hasMany= [book: Book]
对我来说,目前的代码运作良好,祝你好运。
P.S。 我正在使用grails 2.3.11
答案 1 :(得分:0)
正确的语法是
static namedQueries = {
hasGenre {genreName ->
book{
genres {
eq 'title' genreName
}
}
}
}