【发布时间】:2020-09-16 13:02:00
【问题描述】:
在nodes 是使用 Spring Data/JPA 的拥有方的情况下,用双向关系表示下表的最佳方式是什么?我希望能够用node_node 保存nodes 并保存node_node。
节点表
- 身份证
node_node表
node_id_1
node_id_2
这是我目前所拥有的。与NodeNode 作为拥有方的双向关系意味着当我在parents 或children 或Node 中创建、更新或删除元素时,它不会被持久化。当我通过添加到parent 或children 来更新Node 时,它似乎可以工作,但是当我通过删除来更新时,它就不起作用了。我需要通过NodeNode 保存,因为它是拥有方,但这太麻烦了,因为它需要保存到Node 和NodeNode。
public class Node {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private Set<NodeNode> parents;
@OneToMany(mappedBy = "child", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private Set<NodeNode> children;
}
public class NodeNode {
@ManyToOne
@JoinColumn(name = "node_id_1")
private Node parent;
@ManyToOne
@JoinColumn(name = "node_id_2")
private Node child;
}
目标是能够保存 Node 以及对 Node.parents 或 Node.children 的任何更改,并同时保存 NodeNode。
【问题讨论】:
-
“最好”是什么意思?没有说明它是基于意见的。
-
@JensSchauder 我想了解实现它的标准方式。我要求它工作的方式是我想要实现它的方式,但它可能不是最佳解决方案。