我需要从DB中检索一棵树,其中我定义了两个表:
节点这里我定义了一个节点元素
关系这里我通过指定使用ID的父母和孩子来定义树结构
在互联网上查看我只找到一个包含单个表的示例,即节点1,其中定义了节点和关系:
@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>();
}
即使它更简单,我也不太喜欢它,因为基础表没有规范化。
任何人都可以使用两张桌子给我一个简单的例子吗?
答案 0 :(得分:1)
您可能希望在关系表中有两列
| id | 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;
类似地,子节点将针对的parent_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;
答案 1 :(得分:0)
如果我正确理解你可以创建包含两个ID的关系表 - 一个节点ID,另一个节点ID - Nodes表中该节点的父节点。