2015-05-22 111 views
1

我有兩個實體。 A和B. AB之間的關係是@ManyToMany。因此,我已經爲項目所需要的@ManyToMany關係引入了第三個實體C在ManyToMany關係中刪除記錄彈簧數據jpa

我的實體類看起來像下面。

@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

您不必創建映射Many To Many表的實體。 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; 
}