当前位置: 首页 > 知识库问答 >
问题:

Oracle分层数据的JPA/Hibernate map@OneTomany

姚培
2023-03-14
id name parent_id
1  A    1
2  A1   1
3  A2   1
4  A11  2
select * from Organization start with id=1 connect by nocycle prior id=parent_id;
with o_hier as (select o.id, o.parent_id, CONNECT_BY_ISCYCLE as lvl from Organization o start with id=4 connect by nocycle prior parent_id = id) select o.* from Organization o, o_hier where o.id = o_hier.id union all select o.* from Organization o, o_hier where o.id = o_hier.parent_id and o_hier.lvl = 1;
@Entity
@Table(name = "Organization")
public class OrganizationEntity {

    //getter/setter omitted for readability

    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME")
    private String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @???
    List<OrganizationEntity> descendants = new ArrayList<>();

    @ManyToOne(fetch = FetchType.LAZY)
    @???
    List<OrganizationEntity> ancestors= new ArrayList<>();
}

我知道可能的性能问题,但是我们可以使用Hibernate/JPA映射类似的东西吗?

共有1个答案

花健
2023-03-14

这是一个棘手的问题。您可以使用标准的父映射和子映射。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID")
OrganizationEntity parent;

@OneToMany(fetch = FetchType.LAZY)
@mappedBy(mappedBy="parent")
List<OrganizationEntity> childern;

然后使用标准的tree taversals算法得到所有的祖先(简单while循环)或所有的后代(一些DFS变体,通常是预先排序)。

治疗方面,这个伤口很慢。

 类似资料:
  • 问题内容: 我在Oracle11g中有一个具有(id,parent_id)结构的表。 我想对其进行查询,以获取与这些ID各自分层链接的所有行,因此结果应为: 我一直在和上苦苦挣扎,现在,我所能得到的只是查询所需结果的一小部分: 我不想使用任何循环来获取完整的结果。 任何的想法 ? 最好的问候,J茅r么我Lefr猫re PS:在第一个答案之后编辑,注意到我忘记了一些我想要的结果… 问题答案: 您发布

  • 问题内容: 我有一个与父子关系的表,我需要递归查询的帮助 表结构 我正在尝试进行递归查询,但是我无法做到这一点,建议我应该如何查询数据库 问题答案: 正如上面所指出的,这并不是真正的递归,但是如果您知道最大需要深入多少步,则可以沿以下方向使用某些方法(也许使用PHP生成查询): 我首先将父ID设置为NULL而不是0,但这是个人喜好。 ^^在这种情况下,您需要走多远。 [ 下一点没有严格意义 ] 然

  • 我试图在我的java程序中实现分页,下面是我试图编写的查询,但使用JPA、Criteria和hibernate无法成功。

  • 本文向大家介绍分层数据模型,包括了分层数据模型的使用技巧和注意事项,需要的朋友参考一下 分层数据模型是最早的数据模型之一。该模型是基于文件的模型构建,就像树一样。在此树中,父节点可以与多个子节点关联,但是一个子节点只能有一个父节点。 对于目录和文件,可以说单个目录进一步包含多个文件或目录,然后这些目录包含更多文件,依此类推。 这可以表示为- 示例 使用关系数据库的层次模型的示例如下- <员工> E

  • 我得到了存储库代码: 当我在该查询上运行测试时,我得到了以下Hibernate警告:

  • 我在Spark(v2.1.1)中有一个数据集,其中有3列(如下所示)包含分层数据。 我的目标是根据父子层次结构为每一行分配增量编号。从图形上可以说,分层数据是树的集合 根据下表,我已经根据“Global_ID”对行进行了分组。现在,我想以增量顺序生成“值”列,但基于“父”列和“子”列的数据层次结构 表格表示(值是所需的输出): 树形表示(每个节点旁边都显示了所需的值): 代码片段: 经过大量研究并