Grails domain命名查询字符串列表

时间:2015-10-15 05:13:57

标签: grails gorm named-query domain-object

我有一个简单的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"这似乎不会影响检索。我究竟做错了什么?我对这个领域很陌生

提前致谢

2 个答案:

答案 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 
               } 
           }
       }
   }