親エンティティを削除するときに、(データベースから)関連する子エンティティも削除する必要があります。私は下に見られるように削除のカスケードを使用しようとしましたが、私は間違って何かをしているに違いありません。親エンティティの削除時に子エンティティが削除されない
親エンティティオブジェクトでremoveを呼び出すと、「エンティティはまだデータベース内の別の場所で参照されています」というエラーメッセージが表示されます。データベース内の他の場所でエンティティが参照されている唯一の場所は、以下の2つの表にあることを確認できます(データベースから子行を手動で削除すると、親のremove呼び出しが正常に機能します)。私はエンティティオブジェクトについて読んでいて、過去9時間の間にさまざまなことを試みてきました。私は間違って何をしていますか?ここで
は私の親テーブルである:ここで
@Entity
@Table(name = "TURTLE_LOOKUP")
public class TurtleLookup implements Serializable
{
@Basic(optional = false)
@Column(name = "TURTLEID")
private int turtleid;
@Basic(optional = false)
@Column(name = "TURTLE")
private String turtle;
@OneToMany(mappedBy = "turtleType", cascade = CascadeType.REMOVE)
List<TurtleReview> turtleReviews;
...
}
は私の子テーブルです:/ UPDATE
@Entity
@Table(name = "TURTLE_REVIEW")
public class TurtleReview implements Serializable
{
@Column(name = "TURTLE_REVIEW_ID")
private int turtleReviewId;
@Column(name = "TURTLE_YEAR")
private int turtleYear;
@ManyToOne(cascade = CascadeType.REMOVE, optional = false)
@JoinColumn(name = "TURTLE_ID", referencedColumnName = "TURTLEID")
private TurtleLookup turtleType;
@Column(name = "IS_COMPLETE")
private short isComplete;
...
}
EDIT:
私はCascadeType.ALLにCascadeType.REMOVEを変更した場合は、親TurtleLookupエンティティオブジェクトを削除すると、TurtleReviewエンティティがデータベースから正常に削除されます。ただし、新しいTurtleReviewエンティティオブジェクトを作成するために以下の関数を呼び出すと、JPAは新しいTurtleLookupエンティティをデータベースに挿入しようとします。「EntryはすでにDB内にあります。Transaction Rollback」例外がスローされます。以下は、新しいTurtleReviewエンティティを作成するときに実行されるコードです。すべて、またはすべて削除 - 孤児
@OneToMany(mappedBy = "turtleType", cascade = CascadeType.REMOVE)
List<TurtleReview> turtleReviews;
...
}
両方をCascadeType.ALLに変更すると、子オブジェクトの削除が機能しますが、新しいTurtleReviewエントリの作成時に、「Entry already DB内に存在します」というエラーメッセージが表示されます。 JPA/Entityフレームワークが作成しているSQL文をデバッグすることで、そうでなければTURTLE_LOOKUP表に新しい行を挿入しようとしているのがわかります。 – Mitchell
turtlereviewオブジェクトを保存している間にturtlelookupを作成しないようにするには、TurtlleReviewエンティティのturtletypeフィールドのカスケードを削除する必要があります。 – OTM