私はJPA 2.0を使用しており、休止状態です。私は次のようにUserクラスとGroupクラスを持っています:JPA Hibernateの多対多カスケード
public class User implements Serializable {
@Id
@Column(name="USER_ID")
private String userId;
@ManyToMany
@JoinTable(name = "USER_GROUP",
joinColumns = {
@JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns = {
@JoinColumn(name = "USER_ID")
}
)
private Set<Group> groupList;
//get set methods
}
public class Group
{
@Id
@Column(name="GROUP_ID")
private String groupId;
@ManyToMany(mappedBy="groupList")
private Set<User> memberList;
//get set methods
}
そして、私はユーザーとグループを作成し、そのグループにユーザーを割り当てます。
グループを削除すると、グループは削除され、グループに含まれるすべてのユーザーグループの関係は自動的にUSER_GROUP結合テーブルから削除されますが、ユーザー自身はUSER表から削除されません。
上記のコードでは、グループを削除するとGROUPテーブルの行だけが削除され、USER_GROUP結合テーブルの削除されたグループへのエントリがユーザーに残ります。私はこのようなUserクラスにカスケードを置く場合
:
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "USER_GROUP",
joinColumns =
{
@JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns =
{
@JoinColumn(name = "USER_ID")
})
private Set<Group> groupList;
私はグループを削除すると、ユーザーは、同様に削除されます!
私が欲しいものを達成する方法はありますか?
私はあなたが何らかのグループに割り当てられている場合、何も言及していないので、全くカスケードしていないと思いますが、ユーザーを削除するとどうなりますか?結合表のユーザー・グループ関係は削除されますか?グループ自体は削除されますか? – Hery
私の言ったようにすれば、ユーザグループの関係はグループの側面で完全に管理されます。つまり、すべてのグループからユーザーを削除するまで、ユーザーを削除することはできません。これを守るには、グループからユーザーを削除してからグループを保存する必要があります。ユーザーだけを削除しても、ユーザーグループの関係や結合テーブルは削除されません。カスケードがなければ、グループを削除すると関連付けは削除されますが、ユーザーは元の質問では望んだことは削除されません。 – digitaljoel
私は参照してください...管理側としてグループを使用する必要があります...両側を管理グループにする方法はありますか?つまり、ユーザーを削除すると、ユーザーとユーザーグループも削除されますが、グループは削除されます。グループを削除すると、グループとユーザーグループは削除されますが、ユーザーは削除されません。 – Hery