为了账号安全,请及时绑定邮箱和手机立即绑定

休眠删除只是不会触发

休眠删除只是不会触发

吃鸡游戏 2022-06-23 16:52:45
我之前问过这个,但仍然不知道发生了什么......我读过关于删除之前需要清除关系的实体,以及父实体中的 cascade.all,但是我仍然不明白休眠是如何不做任何事情的......@Transactionalpublic void deleteAllinRange(LocalDate a, LocalDate b) {List<Invoice> z = invoiceRepo.selector(a,b);    for(Invoice x : z){        x.setOwner(null);        invoiceRepo.delete(x);    }进入 for 循环 z 列表大小为 314,并且有我期望的所有实体。然后我尝试将 setOwner 设置为 null,因为这是与父元素的唯一关系。在清空所有者之后,x 实体中的所有属性都是 long、string 或 localDate 类型,所以肯定不能与父元素有任何关系吗?父元素是一组带有发票元素列表的发票@OneToMany(cascade=CascadeType.ALL, mappedBy = "owner", orphanRemoval = true)@JsonManagedReferenceprivate List<Invoice> invoices = new ArrayList<>();java fill 只是运行invoiceRepo.delete(x);x 314,但实际上什么都不做,SQL 调试显示甚至没有尝试删除任何东西,注意这里查询...为什么会这样?为什么没有任何查询,没有错误,什么都没有。
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

当你setOwner不保存 x 时,它没有任何效果。此外,如果您有一个约束nullable=false,则不能将其设置为 null。

你想让我做什么?是否要删除发票并保留所有者?然后你应该删除orphanRemoval = true.

或者,如果您想删除孤儿,请保持原样,只需删除发票而不将所有者设置为空。它将自动删除孤立的所有者。

如果您想手动管理它们,请不要设置外键并破坏它们之间的关系,只需在需要时删除任何记录并自己设置字段为空或值。

另外,也可以使用delete(Iterable iterable)repository的方法一次性删除多个。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信