【发布时间】:2010-04-10 03:19:26
【问题描述】:
我有一个用户类 hasMany = [friends:User]
现在我正在尝试显示好友列表 - ${user.friends}
但是,我希望能够像我一样应用参数,例如 User.findAllBy(user, [max:10, sort: 'dateCreated', order: 'desc"])
谁能告诉我如何在 Grails / Groovy 中的一对多上执行此操作?
【问题讨论】:
我有一个用户类 hasMany = [friends:User]
现在我正在尝试显示好友列表 - ${user.friends}
但是,我希望能够像我一样应用参数,例如 User.findAllBy(user, [max:10, sort: 'dateCreated', order: 'desc"])
谁能告诉我如何在 Grails / Groovy 中的一对多上执行此操作?
【问题讨论】:
我会使用 HQL:
String hql = '''
select u from User u, User u2
where u in elements(u2.friends) and u2=:user
order by u.dateCreated desc
'''
int max = ...
int offset = ...
def friends = User.executeQuery(hql, [user: user], [max: max, offset: offset])
您可以尝试过滤好友集合,但一旦您对它进行任何操作,它就会从数据库中完全加载,因此如果您只想要 10 个实例,那么您将浪费加载所有其余的实例。
【讨论】:
我刚刚发现了 Grails 的 GORM Labs 插件,它提供了以下功能
“对于每个“hasMany”属性,现在都有一个关联方法,该方法采用分页属性(“offset”和“max”)并生成适当的页面。还有一个“countBars”实例属性将提供总数"bars" 集合的大小。如果集合之前没有初始化,这一切都通过单独的数据库查询完成,因此您可以避免加载集合的所有元素"
【讨论】: