查询GORM grails的单向一对多关系

时间:2012-11-29 06:18:58

标签: hibernate grails gorm one-to-many

Author{
 String name;
 List<Book> books
 static hasMany= [books: Book]
}

Book{
 int number_of_pages;
 String name;
}

我想查询并获取按number_of_pages

排序的特定作者的前10本书

2 个答案:

答案 0 :(得分:2)

使用HQL,您可以:

    def query = "select book from Author author join author.books book where author=:author order by book.number_of_pages"
    def books = Author.executeQuery(query, [author: author], [max: 10])

注意:您应该将number_of_pages重命名为numberOfPages

答案 1 :(得分:0)

我建议您通过添加作者作为Book的属性来使作者对Book可见。

这样你就可以:

Book.findAll(sort: 'number_of_pages', max: 10) { author.id == myAuthorVariable.id }

虽然,有一个更好的方法。如果你使用Author实现equals方法,你可以写:

Book.findAll(sort: 'number_of_pages', max: 10) { author == myAuthorVariable }    

另外,你可以设置'偏移',这是从x寄存器开始给我带来10本书。这对于分页很有用:

Book.findAll(sort: 'number_of_pages', max: 10, offset: 50) { author == myAuthorVariable }    

作者的等号实现可以是:

def boolean equals(author) {
    if (this.is(author)) return true

    if (!author || getClass() != author.class) return false

    return this.name == author.name
}