作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有消息,需要显示十个(例如)第一个“根”回复以及对自身的所有回复,它应该看起来像一棵树。 (标准消息和树状回复 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/
我是一名优秀的程序员,十分优秀!