查询Grails中的多个域对象

Rya*_*nch 3 grails

我正在构建一个"最近活动"页面,只是为了给出一些背景信息.基本上,这个页面将是用户执行的几个不同动作的混搭.问题是这些数据跨越多个(大约3个)域对象类型,所有这些都具有不同的字段.所有域都与User对象相关联,但关联不同.

域名是UserPost,FriendRequest和UserTask.有没有办法可以查询所有这些域,支持分页,并按dateCreated排序?改变我的结构会更好吗?任何帮助都会很棒!

fab*_*474 5

我已经为我的网站实现了类似的功能,我得出的结论是,最好添加一个记录所有类型活动的Activity域类.让我们说吧

class Activity {
  Date dateCreated
  String linkClassName
  Long linkId

  def getLink() { getClass().classLoader.loadClass(linkClassName).get(linkId) }
}
Run Code Online (Sandbox Code Playgroud)

然后,只要在UserPost,FriendRequest和UserTask(或其他)中插入新记录,就可以使用afterInsert GORM事件在Activity中创建新条目,如下所示:

def afterInsert = {
  new Activity(linkClassName: this.class.name, linkId: this.id).save()
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您可以检索最近的活动,如下所示:

def activities = Activity.list(max: 5, sort:'dateCreated', order:'desc')
Run Code Online (Sandbox Code Playgroud)