gpt4 book ai didi

java - 如何显示对消息的 TreeView 回复? Java 和 hibernate

转载 作者:行者123 更新时间:2023-12-04 06:35:56 24 4
gpt4 key购买 nike

我有消息,需要显示十个(例如)第一个“根”回复以及对自身的所有回复,它应该看起来像一棵树。 (标准消息和树状回复 View ,您知道的)。
所以,问题是 - 如何从数据库中获取它 - 我正在使用 hibernate ,并且它会得到很多时间 - 递归地检索整个集合本身,包括所有子树。 (而且,也许,它只适用于小型集合,否则递归会导致堆栈溢出(哈哈。我们在这里:))
有没有更有效的决定?

所以现在我有类似下面的代码,但我需要另一种方式(BaseEntry 是消息和任何回复的类):

@Entity public class BaseEntry extends VersionedEntity {
private @Nullable BaseEntry parent;

@ManyToOne
@ForeignKey(name="base_entry_parent__base_entry_fk")
@Nullable public BaseEntry getParent()
{
return parent;
}

@OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
private List<BaseEntry> children;

...

你能给点建议吗?

最佳答案

有一个更有效的解决方案,但这意味着完全改变您在数据库中存储内容的方式。阅读 http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/学习如何使用嵌套集树。这种方法使写入昂贵,但读取便宜得多。如果为已编入索引的根节点添加标志,则很容易获取根节点列表,然后获取子树。

我建议对他们的方法进行重大修改。他们使用了完全没有间隙的整数集。这意味着每次写入都必须重新编号树中的所有内容。这使得写入更加昂贵。但是假设您以 2**20 的间隙开始根节点,并且默认情况下每个子节点占用可用空间的一半。然后您根本不需要进行任何重新编号,直到您拥有一组深度为 21 或宽度为 21 的回复。当您重新编号时,您可以只重新编号该根节点下的子树,因为您仍有很多间隙可以使用。

关于java - 如何显示对消息的 TreeView 回复? Java 和 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4878687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com