Grails自关系中的递归抓取
我有以下grails域类,包含一个自关系Grails自关系中的递归抓取,grails,gorm,one-to-many,grails-domain-class,Grails,Gorm,One To Many,Grails Domain Class,我有以下grails域类,包含一个自关系 class Message { static hasMany = [replies: Message] Message isReplyTo User author String title String text Date createdAt Date lastUpdated } 我想写一个可以做两件事的查询 如果一条消息是父消息,即它不是对任何其他消息的答复,则检索一个以该消息开始建立对话的消
class Message {
static hasMany = [replies: Message]
Message isReplyTo
User author
String title
String text
Date createdAt
Date lastUpdated
}
我想写一个可以做两件事的查询
Message 1
---- Reply 1
---- Reply 2
-------- SubReply 1
我已经考虑过这一点,但无法想出一种可行的方法,因为没有
对话
域类将属于同一对话的消息联系在一起。因此,我希望有某种递归查询可以帮助我实现这一点。有两种方法可以处理这种类型的结构,而且web上也不乏关于这种基于树的关系的示例
class Message {
static hasMany = [replies: Message]
Message isReplyTo
User author
String title
String text
Date createdAt
Date lastUpdated
}
用最简单的方法;您可以有一个父级
子级
结构,其中null
父级将表示树的顶部,“null”子级将表示该分支的结束。这是一个简单而有效的结构,但是很难捕获度量,因为您总是必须递归地搜索整个线程
Message{
...
Message parent
Message child
}
post在GSP示例中显示了一个良好的递归:
另一种模式是物化路径。实施起来有点小技巧,但一旦到位,就很容易实现。具体化的路径也更容易收集回复数量等指标,而且做面包屑也更容易
Message{
...
Message parent
String path //would like something like this: 1/2/3/4
}
有关具体化路径搜索的示例,请查看google或post