分页与集合

时间:2016-06-03 08:10:19

标签: grails pagination gorm

我有像

这样的自我引用域
User{

 static hasMany=[friends:User]

}

我可以为这样的用户获取所有朋友:

user.friends

但是我需要在我没有想法的地方应用分页,有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用条件来检索用户对象。多亏了这一点,你将能够使用分页:

int maxElementsPerPage = 15    
User.createCriteria().list(offset: currentPage * maxElementsPerPage, 
                           max: maxElementsPerPage) {
    // condition here
    'in' ('id', user.friends*.id) 
    // I'm not sure if you need to put '*.id'
} 

你只需要增加'currentPage'就可以获得下一页的元素。

对于Grails标准,您应该查看official Grails criteria documentation

或者,您可以在GSP中使用Grails标记(它将处理所有内容):

<g:paginate controller="user" action="list" total="${userCount}" />

更多详情here

答案 1 :(得分:2)

如果你的域类中有一个集合,你需要分页,你应该一对一地进行单向:

class User {
  static belongsTo = [ friend:User ]
}

否则GORM必须缓存hasMany id。

然后查询将如下:

def friends = User.findAllByFriend( user, [ max:100, offset:0 ] )