GroupとUserの2つのエンティティがあるとしましょう。すべてのユーザーは多くのグループのメンバーになることができ、すべてのグループは多くのユーザーを持つことができます。
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
グループを削除したいと思います(メンバーが多いとしましょう)。
問題は、あるグループでEntityManager.remove()を呼び出すと、JPAプロバイダー(私の場合はHibernate)が結合テーブルから行を削除せず、外部キーの制約のために削除操作が失敗することです。Userでremove()を呼び出すと、正常に機能します(これは、関係の所有側と関係があると思います)。
では、この場合、どうすればグループを削除できますか?
私が思いつく唯一の方法は、グループ内のすべてのユーザーをロードしてから、すべてのユーザーについて現在のグループをグループから削除し、ユーザーを更新することです。しかし、このグループを削除できるようにするためだけに、グループのすべてのユーザーに対してupdate()を呼び出すのはばかげているようです。