多対多の関係を持つ 2 つのエンティティがあります。映画エンティティはこの関係の所有者であるため、俳優エンティティを削除する場合は、@PreRemove アノテーションが付けられたメソッドを使用して、映画キャスト内の俳優 ID の出現を削除し、「外部キー違反例外」を回避します。
映画教室
@Entity
public class Movie extends AbstractBusinessObject{
@ManyToMany
private Map<String, Actor> cast;
// setters and getters
public void removeCastMember(Actor actor){
for (Entry<String, Actor> e : cast.entrySet()) {
if(e.getValue().id.equals(actor.id)){
cast.remove(e.getKey());
}
}
} // removeCastMember()
}
アクタークラス
@Entity
public class Actor extends AbstractBusinessObject{
@ManyToMany(mappedBy = "cast")
private Set<Movie> movies;
// setters and getters
@PreRemove
private void removeActorFromMovies() {
for (Movie m : movies) {
m.removeCastMember(this);
}
}
}
明確にするために、私のテストから、それは機能します-映画オブジェクトはデータベースで正しく更新されます。ただし、 saveOrUpdate() への呼び出しがない場合、またはそれらのオブジェクトを永続化/マージしない場合に、どのように可能になるのか理解できません。