如何限制Grails中类的关系元素?

时间:2013-06-25 21:41:14

标签: grails gorm grails-2.0 grails-domain-class

我有

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本书? 还有办法对它们进行排序吗?

1 个答案:

答案 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),那么您可能需要查看batchSizeorder。另外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"
  }
}