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

Hibernate 查询GORM grails的单向一对多关系,hibernate,grails,gorm,one-to-many,Hibernate,Grails,Gorm,One To Many,我想查询并获取特定作者的前10本书,按页数排序,使用HQL可以执行以下操作: Book{ int number_of_pages; String name; } 注意:您应该将numberOfPages重命名为numberOfPages我建议您通过添加作者作为书的属性,使作者对书可见 这样你可以做到: def query = "select book from Author author join author.books book where author=:author ord

我想查询并获取特定作者的前10本书,按页数排序,使用HQL可以执行以下操作:

Book{
 int number_of_pages;
 String name;
}

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

我建议您通过添加作者作为书的属性,使作者对书可见

这样你可以做到:

    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])
尽管有更好的方法。如果让Author实现equals方法,则可以编写:

Book.findAll(sort: 'number_of_pages', max: 10) { author.id == myAuthorVariable.id }
另外,你可以设置一个“偏移量”,也就是说,从x寄存器开始给我10本书。这对于分页非常有用:

Book.findAll(sort: 'number_of_pages', max: 10) { author == myAuthorVariable }    
equals for Author的实现可以是:

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

是否有任何理由在页数中使用下划线而不是camelCase?Java中的约定(groovy中也是如此)是驼峰式的。它说
无法解析属性:books of Author
,我把它放在AuthorI中的getBooks()方法中,因为组织是一个实体,它也有书籍
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
}