晚上好,
我有一个带有以下签名的字段:
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="username")
private Collection<UserAuthority> authorities;
当我尝试从集合中删除UserAuthority时,它会通过将username设置为null而不是删除来尝试更新。
删除:
...
authorities.remove(targetAuthority);
user.setAuthorities(authorities);
repo.save(user);
...
这是对的吗?
我可以让它正确级联删除的唯一方法是,如果我有一个单独的UserAuthority存储库并执行类似以下的操作
...
authRepo.delete(authorities);
...
任何帮助都会很棒!
谢谢!
答案 0 :(得分:1)
如果您将此代码映射为双向关系,则上面提供的代码将起作用:
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true, mappedBy="user")
private Collection<UserAuthority> authorities;
然后在UserAuthority:
@ManyToOne
@JoinColumn(name="username")
private User user;
MappedBy告诉Hibernate UserAuthority是拥有实体,即它具有定义关联的外键。因此,当您要保存新的UserAssociation实体时,需要确保设置引用的用户。
这也将导致更优化的保存过程,因为Hibernate可以使用正确的外键插入UserAuthority记录,而不是执行插入然后更新以设置它。