【发布时间】:2014-05-28 10:48:26
【问题描述】:
我有两个实体 Users 和 Groups ,与多对多关联
一个用户属于许多组并且他认识他们 (navigabilite_1)
一个组包含许多用户,他认识他们 (navigabilite_2)
我希望当我删除一个用户时,只有用户和关系(在联接表中)被删除而不是组,删除组的相同不应该只影响用户组和关系
我应该使用什么样的关联双向或两个单向,我应该把级联放在哪里删除?
【问题讨论】:
我有两个实体 Users 和 Groups ,与多对多关联
一个用户属于许多组并且他认识他们 (navigabilite_1)
一个组包含许多用户,他认识他们 (navigabilite_2)
我希望当我删除一个用户时,只有用户和关系(在联接表中)被删除而不是组,删除组的相同不应该只影响用户组和关系
我应该使用什么样的关联双向或两个单向,我应该把级联放在哪里删除?
【问题讨论】:
您应该使用双向关联,并且不应使用任何级联,因为级联也会删除关联另一端的实体。
假设 User.groups 是关联的所有者,删除组将使用
for (User user : group.getUsers()) {
user.getGroups().remove(group);
}
// optional:
group.getUsers().clear();
session.delete(group);
删除用户将使用
// optional:
for (Group group : user.getGroups()) {
group.getUsers().remove(user);
}
user.getGroups().clear();
session.delete(user);
【讨论】: