删除ManyToMany关系弹簧数据jpa中的记录

时间:2015-05-22 07:57:28

标签: spring spring-data spring-data-jpa

我有两个实体。 A和B. AB之间的关系为@ManyToMany。所以我已经为项目所需的C关系引入了第三个实体@ManyToMany

我的实体类如下所示。

@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;
}

现在,我想要删除实体AB的记录,然后它应删除C中的相应记录。 但是当我删除AB的记录时,它会显示

  

无法删除或更新父行:外键约束失败

AB删除记录所需的其他配置,还会删除C中的相应记录?

1 个答案:

答案 0 :(得分:2)

您不必创建实体来映射“多对多”表。 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;
}