【问题标题】:How to render a tree structure in hibernate with multiple tables?如何在具有多个表的休眠中渲染树结构?
【发布时间】:2016-02-11 07:57:47
【问题描述】:

我需要从定义了两个表的数据库中检索树:

  • node这里我定义了一个node元素

  • 关系在这里,我通过使用 ID 指定父母和孩子来定义树结构

在网上我只找到了一个表的例子,即节点一,其中定义了节点和关系:

@Entity 
@Table(name = "tree")
public class Node { 

    @Id 
    @GeneratedValue
    private Integer id; 

    @NotNull 
    private String name; 

    @OneToMany 
    @JoinColumn(name = "parent_id") 
    @OrderColumn 
    private List<Node> children = new LinkedList<Node>();

}

尽管它更简单,但我不太喜欢它,因为基础表没有标准化。

谁能给我一个使用两张表的简单例子?

【问题讨论】:

  • 请在问题中添加表格结构。

标签: java oracle hibernate


【解决方案1】:

您可能希望在关系表中有两列,

|标识 | parent_id|

父节点条目将根据节点的 id 更新 parent_id

    @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="Relationship", joinColumns =  @JoinTable(name = "Relationship", joinColumns = @JoinColumn(name = "parent_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id", referencedColumnName = "id"))@Fetch(FetchMode.SELECT)
 private Node parentNode;

同样,子节点会根据父节点的父 ID 更新 id 节点

@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name = "Relationship", joinColumns = @JoinColumn(name = "id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "parent_id", referencedColumnName = "id"))
@Fetch(FetchMode.SELECT)
 private Set<Node> childNodes;

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以创建包含两个 ID 的关系表 - 一个节点 ID,另一个节点 ID - 节点表中此节点的父节点。

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 2018-01-26
      • 2014-01-23
      • 2011-10-04
      相关资源
      最近更新 更多