エントリの削除中に制約違反の例外が発生します
私は関係テーブル TransportationEvent と 結論を持っています
関係が似ている
@Entity
public class TransportationEvent {
...
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
private List<Conclusion> conclusions = new ArrayList<Conclusion>();
...
}
@Entity
public class Conclusion {
....
@ManyToMany( fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
private List<TransportationEvent> transportationEvents = new ArrayList<TransportationEvent>();
....
}
ここのデータベースには、次のような別の2つのテーブルがあります
結論_交通イベントと交通イベント_結論
ここで私の要件は、両方のテーブル (TransportationEvent と結論) のレコードを削除する必要があることです。
ここで、次のような結論テーブルのレコードを削除しようとしています:
removeConclusions(conclusion.getId());
public void removeConclusions(Long id) {
entityManager = dbConn.getConnection();
Conclusion conclusion = entityManager.find(Conclusion.class, id);
entityManager.getTransaction().begin();
entityManager.remove(conclusion);
entityManager.getTransaction().commit();
}
しかし、制約違反エラーが発生しています。
原因: java.sql.SQLException: DELETE ステートメントが REFERENCE 制約 "FK30CDAB072AAE439" と競合しました。データベース「ECT」、テーブル「dbo.TransportationEvent_Conclusion」、列「conclusions_id」で競合が発生しました
いくつかのフォーラムを検索して、次のような構文を得ました
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
そして私はそれを次のように適用しました
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<Conclusion> conclusions = new ArrayList<Conclusion>();
@ManyToMany( fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<TransportationEvent> transportationEvents = new ArrayList<TransportationEvent>();
同じ制約違反が発生しているにもかかわらず、両方のエンティティで
結論と交通イベントからレコードを削除するためにこれをどのように使用する必要があるかを教えてください。
前もって感謝します!