【问题标题】:Recursive Fetching in Grails self-relationshipGrails自关系中的递归获取
【发布时间】:2018-11-28 09:42:41
【问题描述】:

我有以下 grails 域类,包含自关系。

class Message {
    static hasMany = [replies: Message]

    Message isReplyTo
    User author
    String title
    String text
    Date createdAt
    Date lastUpdated
}

我想写一个可以做两件事的查询

  1. 如果消息是父消息,即它不是对任何其他消息的回复,则检索从该消息开始构建对话的消息列表。

    Message 1
    ---- Reply 1
    ---- Reply 2
    -------- SubReply 1
    
  2. 给定一条作为回复的消息,对另一条消息也建立一个与上述相同的列表,包括给定消息(回复)所属的父级。

我已经考虑过这一点,但无法完全想到这样做的可能方式,因为没有Conversations 域类将属于同一对话的消息联系在一起。所以我希望有某种递归查询可以帮助我实现这一目标。

【问题讨论】:

    标签: grails grails-orm one-to-many grails-domain-class


    【解决方案1】:

    有几种方法可以处理这种类型的结构,并且网络上不乏关于这种基于树的关系的示例。

    用最简单的方法;你可以有一个ParentChild 结构,其中null 父级将表示树的顶部,而“空”子级将表示该分支的结束。这是一个简单而有效的结构,但可能很难捕获指标,因为您总是需要递归搜索整个线程。

      Message{
        ...
        Message parent
        Message child
      }
    

    This 帖子在 GSP 示例中展示了一个很好的递归:

    另一种模式是物化路径。实现起来有点小技巧,但是一旦到位就很容易工作。物化路径也更容易收集诸如回复计数之类的指标,并且做面包屑也更容易。

      Message{
        ...
        Message parent
        String path //would like something like this: 1/2/3/4
      }
    

    有关具体化路径的搜索示例,请查看 google 或 this 帖子。

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2020-11-09
      • 2017-06-04
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      相关资源
      最近更新 更多