@Entity
public class EUser {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToMany(fetch=FetchType.EAGER)
private List<UserRole> roles;
}
执行以下操作时
EUser approveUser = (EUser) userService.getOne(2);
approveUser.getRoles().clear();
userService.update(approveUser);
System.out.println(approveUser.getRoles().size());
它表示大小为零但是当我在EUser_UserRole
表中查看数据库时,我看到值仍然存在。怎么解决这个?
也在EUser_UserRole
中说
This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available
如何删除手动添加编辑删除?
答案 0 :(得分:0)
se CascadeType
。 Reference
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<UserRole> roles;
更新:
orphanRemoval
属性可以使用JPA 2.x
版本。您必须通过比较UserRole
和新的rolesList`
old rolesList
数据
orphanRemoval
属性不支持ManyToMany
映射。
答案 1 :(得分:0)
级联确实是一种让Hibernate执行删除的方法,如果我看到已发布的代码,那很可能是要求的。但由于问题是手动删除,而级联更自动删除,我必须将建议添加到:
更适合“手动”删除的描述。
答案 2 :(得分:0)
请勿对ManyToMany
关系使用级联。这可能会导致广泛的实体群集上的不希望的波纹删除比人们希望的更容易。
如果要清除单个用户与其角色的关系(从连接表中删除行),则需要清除双方的关系字段,这意味着清除UserRole
中的EUser
列表{1}}并从相应EUser
个实例的列表中删除当前UserRole
。
编辑:
清除相关实体列表时,您不会从数据库中删除任何实体。唯一的结果是连接表中的某些行将被删除,在下次提取/刷新后,您的EUser
和UserRole
实例将不再相关。
如果要删除UserRoles数据库条目,可以在删除与
的关系后执行此操作