gpt4 book ai didi

java - hibernate中的多对多自引用关联

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:13 26 4
gpt4 key购买 nike

我想这样做:

人<--多对多--->人

我想要建立一种关系,一个人可以有多个(多个) parent ,一个 parent 可以有多个 child (多个)

我的 hibernate 映射

@Entity
class Person{

@Id
@Column
long id;

@Column
String name;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "Person_Parent",
joinColumns={ @JoinColumn(name = "parent_ID") },
inverseJoinColumns = { @JoinColumn(name = "child_ID")})
private Set<Person> parent = new HashSet<Person>();

@JsonIgnore
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "Person_Parent",
joinColumns={ @JoinColumn(name = "child_ID") },
inverseJoinColumns = { @JoinColumn(name = "parent_ID")})
private Set<Person> child = new HashSet<Person>();
}

这个映射正确吗?如何使这种关系双向。这样如果我添加一个父级。父级的子级集合应该更新。

最佳答案

在不确定您的问题是什么的情况下,我相信您可能会遇到问题,因为您没有为关系的“拥有”方设置“mappedBy”值。示例:

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Person> parent = new HashSet<Person>();

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="parent")
private Set<Person> child = new HashSet<Person>();

(为了简洁起见,我删除了 @JoinTable。)此外,您可能对通过使用以下注释而不是 @JsonIgnore 来抑制 JSON 序列化的更好方法感兴趣:

@JsonBackReference
private Set<Person> parent = new HashSet<Person>();

@JsonManagedReference
private Set<Person> child = new HashSet<Person>();

关于java - hibernate中的多对多自引用关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19455547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com