休止状態でIm strugglin。オブジェクトを削除しようとしていますが、SQL例外が発生しています。エンティティを削除するときに制約違反が発生する
だから、最初に私のマッピング:
@Entity
public class Meetup {
@Id
@GeneratedValue
@Column
private long id;
@Column(nullable = false)
private ZonedDateTime dateAndTime;
@ManyToOne(fetch = FetchType.EAGER,cascade=CascadeType.PERSIST)
private Location location;
////////////////////////
@Entity
public class Location {
@Id
@GeneratedValue
@Column
private long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private double longitude;
@Column(nullable = false)
private double latitude;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "location")
private List<Meetup> meetups;
/// ///////////////////////
@Entity
public class Match {
@Id
@GeneratedValue
@Column
private long id;
@ManyToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
private List<User> users = new ArrayList<>();
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "meetup_id")
private Meetup meetup;
だから私は、ミートアップエンティティを削除しようとしていますが、それを行うことで、対応するLocationエンティティを削除したくありません。今、私は問題はミートアップクラスでマッピングの「ALL」にカスケードタイプを変更することで解決したが、その後、明らかに私の場所することができ
constraint ["FKJRLUYUGNHRKYWSVSRE8VE9I9D: PUBLIC.MATCH FOREIGN KEY(MEETUP_ID) REFERENCES PUBLIC.MEETUP(ID) (1)"; SQL statement: delete from meetup where id=? [23503-192]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
を取得しています(entityManager.remove)ミートアップのエンティティを削除しようとしているときエンティティも削除されます。そして、これは私が起こりたくないことです。だから、どのように私は場所エンティティを削除せずにミートアップエンティティを削除することができますか?
他の人があなたを助けることができるように、あなたの完全な例外テキストをダンプします.1 –
「Meetup」を削除するには、最初にそれを参照するすべての「Match」エンティティを削除する必要があります。これは、 'Meetup'にバックリファレンスを追加し、それに対応するカスケードを追加することで行うことができます。 - 'Location'はあなたの問題の一部ではないことに注意してください:" _PUBLIC.MATCH_ FOREIGN KEY(MEETUP_ID)REFERENCES PUBLIC.MEETUP(ID) "。 – Thomas
うん、私はそれを気づいたが、その後、私はマッチを削除しなければならないし、私はそれがManyToMany関係のために発生したので、私はマッチを削除する必要があります、そして最後に私は別のテーブル(制約ManyToMany関係)ミートアップを削除できます。私はちょうどミートアップを削除するためにデータベース全体を一掃したので、ちょっと怖いです。それのために私のデザインが吸うのですか? 2人のユーザーが一致した場合、場所Xでミートアップを行うことにしましたが、その後は場所Yに行きたいと思っていましたが、まだお互いが好きです(一致する必要があります):D – filemonczyk