【发布时间】:2020-02-07 11:32:48
【问题描述】:
我有一个树形结构,我称之为图表,它使用adjacency list。 Graph 类有
@OneToMany(mappedBy = "graphEntry", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OptimisticLock(excluded = true)
public List<GraphNode> getStartNodes() {
return startNodes;
}
public void addStartNode(GraphNode graphNode){
startNodes.add(graphNode);
graphNode.setGraphEntry(this);
}
public void removeStartNode(GraphNode graphNode){
startNodes.remove(graphNode);
graphNode.setGraphEntry(null);
}
而 GraphNode 有:
@ManyToOne
@JoinColumn(name = "graphEntry")
public Graph getGraphEntry() {
return graphEntry;
}
@ManyToOne(fetch = FetchType.LAZY, targetEntity = GraphNode.class)
@JoinColumn(name = "parent")
@OptimisticLock(excluded = true)
public GraphNode getParentNode() {
return parentNode;
}
@OneToMany(mappedBy = "parentNode", cascade = CascadeType.ALL, orphanRemoval = true)
@OptimisticLock(excluded = true)
public List<GraphNode> getChildNodes() {
return childNodes;
}
当我用不同的节点替换 startNode 时,我得到了
PersistentObjectException: detached entity passed to persist: ...GraphNode
当我更改 2 个节点的顺序时,我的数据已正确保存在数据库中。
我尝试将级联类型更改为 PERSIST 和 MERGE 而不是 ALL,但这没有帮助。当旧的 startNode 不再指向那里时,看起来休眠正在删除 Graph。
如何确保我的图表没有被删除并且节点替换有效?
【问题讨论】:
标签: java hibernate jpa one-to-many