我有
class User {
String name
hasMany = [books: Book]
}
class Book (
String name
belongsTo = [user: User]
}
现在,我可以访问用户实例的所有书籍:
def user = User.find("someId")
println user.books
我如何限制书籍的数量,以便我只从user.books获得前x本书? 还有办法对它们进行排序吗?
答案 0 :(得分:2)
一种可行的方法是在books
内将List
定义为User
。您需要有一个索引列,但您可以获得分页和排序的好处,如:
class User{
List books
static hasMany = [books: Book]
}
def user = User.find("someId")
println user.books?.getAt(3..10).sort{it.name}
注意: - 强>
用户的所有图书将被懒散地获取,使用上述方法将过滤从索引3到10的书籍。
如果您想优化延迟提取策略(N + 1),那么您可能需要查看batchSize和order。另外sort作为旁注。
示例:
class User {
String name
static hasMany = [books: Book]
static mapping = {
books batchSize: 10
}
}
class Book (
String name
static belongsTo = [user: User]
static mapping = {
order "desc"
}
}