我有两个实体。 A 和 B。A
和 B
之间的关系是 @ManyToMany
。因此,我根据项目需要引入了用于 @ManyToMany
关系的第三个实体 C
。
我的实体类如下所示。
@Entity
class A
{
@OneToMany(cascade = CascadeType.ALL, mappedBy = "a")
List<C> cList;
}
@Entity
class B
{
@OneToMany(cascade = CascadeType.ALL, mappedBy = "b")
List<C> cList;
}
@Entity
class C
{
@ManyToOne
@JoinColumn(name = "ref_a")
A a;
@ManyToOne
@JoinColumn(name = "ref_b")
B b;
}
现在,我想删除实体A
或B
的记录,然后它应该从C
删除相应的记录。
但是当我删除 A
或 B
的记录时,它显示
Cannot delete or update a parent row: a foreign key constraint fails
需要什么其他配置才能从 A
或 B
中删除记录,并且还会从 C
中删除相应的记录?
最佳答案
您不必创建实体来映射多对多表。 ManyToMany JPA 注释就在那里。以下是如何执行此操作的示例。
@Entity
public class Team {
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST }, mappedBy="teams")
private List<Match> matches;
}
@Entity
public class Match {
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
@JoinTable(
name="MATCH_TEAM",
joinColumns={@JoinColumn(name="MATCH_ID", referencedColumnName="ID")},
inverseJoinColumns={@JoinColumn(name="TEAM_ID", referencedColumnName="ID")})
private List<Team> teams;
}
关于spring - 删除多对多关系中的记录 spring data jpa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391301/