如果节点
是使用Spring数据/JPA的拥有方,用双向关系表示下表的最佳方式是什么?我希望能够使用node\u node
保存节点
,并保存node\u node
。
节点表
node_node表
>
节点标识2
这是我到目前为止所拥有的。以NodeNode
为拥有方的双向关系,这意味着当我在节点的
父节点
或子节点
中创建、更新或删除一个元素时,它将不会被持久化。当我通过添加到父节点
或子节点
来更新节点
时,它似乎起作用,但当我通过删除来更新时,它不起作用。我需要通过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
被保存。
最好的解决方案是用manytomy
关系替换OneToMany
和manytomone
,并使用Node
而不是引用NodeNode
。
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH })
@JoinTable(name = "node_node", joinColumns = @JoinColumn(name = "node_id_1"), inverseJoinColumns = @JoinColumn(name = "node_id_2"))
private Set<Node> children;
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "children")
private Set<Node> parents;
首先,这是我的实体。 玩家: 团队: 正如已经说明的许多主题一样,您可以通过Jackson以多种方式避免WebService中的StackOverflow Exeption。 这很酷,除了JPA之外,在序列化之前,所有的实体都可以无限递归地构造另一个实体。这只是丑陋的ans请求需要更长的时间。检查这个截图:IntelliJ调试器 有办法解决吗?知道我希望根据endpoint获得不同的结果。示例:
我在实体“任务”和实体“用户”之间有双向关联。 “任务”定义如下 “用户”的定义是 从两个方向访问关系很好。问题是,一旦定义了“Task”实体,我就无法更新它。 这是一个测试案例 我做错了什么?
在一对多关系中,通常使用@ManyToOne注释的字段是所有者-另一方具有“mappedBy”属性。但是,如果我跳过“mappedBy”并用@JoinColumn(同一列)注释两侧,我可以更新两侧-更改将传播到db。 我没有两个单向关系而不是一个双向关系-只有一个连接列。 没有选择一方作为关系所有者会遇到什么问题? 我的实体看起来类似于以下内容: 它似乎对性能没有任何影响(至少看起来不错),下面是
我有一个实体: 要创建上述实体并将其保存到JPA存储库中,我将执行以下操作: 由于DB中的表存储了候选对象的FK,我认为设置一个id就足够了。但JPA希望我设置候选对象。这迫使我查询候选存储库。 是否需要从候选库中查询候选人以保存,或者如果我有可用的候选人id,我不能直接设置它?
问题内容: 我有两个实体: 我知道和。如果我要序列化的实例,那么它们很好。 但是我还需要传输的实例,并且我想填充该字段。 换一种说法: 在序列化时应该有,但是其父字段可能为空(可以通过使用json参考注释解决)。 在序列化时,它应该带有它们(但不必填充。) 有没有一种使用标准Jackson功能来解决它的方法? 即跳过已经序列化的实体的序列化,而不是标记符合或不符合序列化条件的字段。 问题答案:
我想知道Mapstruct是否以及如何帮助映射具有双向关系的ojects(在我的情况下是一对多): 从/映射到实体会产生。(我希望这会发生)。另一方面,封闭的Mapstruct问题469和1163似乎意味着Mapstruct不会直接支持它。我尝试了这个例子: https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-