![]() |
1
28
使用简单的 然而,有几个其他的方法来模拟这个问题,可以应用到这个问题。第一个是 物质化路径模型
因此,要获取节点“1”及其所有子节点,查询是:
要将其映射到JPA,只需将“path”列作为持久对象的属性。但是,您必须进行簿记,以使“路径”字段保持最新。JPA/Hibernate不会为您这样做。例如,如果将节点移动到不同的父对象,则必须更新父对象引用并从新父对象确定新路径值。 另一种方法称为 套集模型 ,这有点复杂。可能是最好的 described 由其发起者(而不是由我逐字添加)。 还有第三种方法称为嵌套区间模型,但是这在很大程度上依赖于存储过程来实现。 对这个问题的更完整的解释在本书的第7章中描述 The Art of SQL . |
![]() |
2
9
在我看来,这篇文章中最好的答案就像是一个巨大的黑客工程。我已经处理过一些数据模型,在这些模型中,优秀的工程师们认为最好将数据库字段中的树结构编码为文本,例如:“Europe | Uk | Shop1 | John”,并在这些表中包含大量数据。毫不奇怪,MyHackedTreeField表单的查询性能就像“parentHierharchy%”where killers。 解决这类问题最终需要在内存中创建树层次结构缓存和其他许多缓存。。。 如果您需要运行递归查询,并且您的数据量不是很大。。。使您的生活简单,只需加载运行计划所需的DB字段。并用java编写递归代码。 除非你有充分的理由,否则不要进入数据库。
|
![]() |
3
1
我遇到了这样的问题,从一个表中查询菜单节点,
我创立的方式是:
假设我们有一个名为Node的类,创建了一个
还有一个名为boolean isRoot in entity的文件,如果这个节点是根菜单项,
然后,通过查询有isRoot为真的节点,我们只会得到顶级节点,因为
|
![]() |
4
0
我知道这个问题很老了,但由于它是在一个不同的问题,我想给这个更新,因为 Blaze-Persistence 提供对在JPA模型之上使用递归cte的支持。
这将呈现如下所示的SQL
https://persistence.blazebit.com/documentation/core/manual/en_US/index.html#recursive-ctes |