Author{
String name;
List<Book> books
static hasMany= [books: Book]
}
Book{
int number_of_pages;
String name;
}
特定の著者の上位 10 冊をクエリして取得したいnumber_of_pages
Author{
String name;
List<Book> books
static hasMany= [books: Book]
}
Book{
int number_of_pages;
String name;
}
特定の著者の上位 10 冊をクエリして取得したいnumber_of_pages
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
。
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 }
Authorのequalsの実装は次のようになります。
def boolean equals(author) {
if (this.is(author)) return true
if (!author || getClass() != author.class) return false
return this.name == author.name
}