1:多对多关系中如果没有设置级联删除而是简单的
@ManyToMany(cascade={CascadeType.REFRESH,CascadeType.MERGE},fetch=FetchType.LAZY)
@JoinTable(name="roleaction",inverseJoinColumns={@JoinColumn(name="roleId")},joinColumns={@JoinColumn(name="actionId")})
private Set<Role> roles = new HashSet<Role>(0);//角色集合多对多关联
因为有set<actions>集合所以每当删除一个action的时候,中间roleaction也删除了这个actionID相关的值,那只是因为集合中有这个值并且roleaction属于action
2:当设置了级联删除的时候
@ManyToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinTable(name="roleaction",inverseJoinColumns={@JoinColumn(name="roleId")},joinColumns={@JoinColumn(name="actionId")})
private Set<Role> roles = new HashSet<Role>(0);//角色集合多对多关联
当删除某一个action的时候,那么会在roleaction中查找到其role的id然后就会全部删除role有关的action,所以级联删除最好不用。
本文探讨了Java持久化API中多对多关系的处理方式,特别是针对级联删除的不同配置及其对关联表的影响。通过具体示例,解释了在不启用级联删除时如何手动管理关联数据,以及在启用时如何自动处理关联记录。
1万+

被折叠的 条评论
为什么被折叠?



