休眠删除只是不会触发
Hibernate delete just won't fire
我以前问过这个,但仍然不知道发生了什么...
我已经阅读了有关在删除之前需要清除实体关系的内容,以及有关父实体中的 cascade.all 的内容,但是我仍然不明白 hibernate 为何不执行任何操作...
@Transactional
public 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,因为这是与父元素的唯一关系。
nulling owner 后,x 实体中的所有属性都是 long、string 或 localDate 类型,所以肯定不会与父元素有任何关系?
父元素是包含发票元素列表的发票集
@OneToMany(cascade=CascadeType.ALL, mappedBy = "owner", orphanRemoval = true)
@JsonManagedReference
private List<Invoice> invoices = new ArrayList<>();
java 只填充 运行 invoiceRepo.delete(x);
x 314,但实际上什么都不做,SQL 调试显示甚至没有尝试删除任何东西,注意在这里查询...
为什么会这样?为什么没有任何查询,没有错误,什么都没有。
当您 setOwner
并且不保存 x 时,它没有任何效果。此外,如果您有约束 nullable=false
,则不能将其设置为空。
你想做什么?您要删除发票并保留所有者身份吗?然后你应该删除 orphanRemoval = true
.
否则,如果您想删除孤儿,请保持原样,只删除发票而不将所有者设置为空。它将自动删除孤立的所有者。
如果您想手动管理它们,请不要设置外键并破坏它们之间的关系,只需在需要时删除任何记录并自行设置字段为空或值。
另外,您也可以使用仓库的方法delete(Iterable iterable)
一次性删除多个
我以前问过这个,但仍然不知道发生了什么...
我已经阅读了有关在删除之前需要清除实体关系的内容,以及有关父实体中的 cascade.all 的内容,但是我仍然不明白 hibernate 为何不执行任何操作...
@Transactional
public 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,因为这是与父元素的唯一关系。
nulling owner 后,x 实体中的所有属性都是 long、string 或 localDate 类型,所以肯定不会与父元素有任何关系?
父元素是包含发票元素列表的发票集
@OneToMany(cascade=CascadeType.ALL, mappedBy = "owner", orphanRemoval = true)
@JsonManagedReference
private List<Invoice> invoices = new ArrayList<>();
java 只填充 运行 invoiceRepo.delete(x);
x 314,但实际上什么都不做,SQL 调试显示甚至没有尝试删除任何东西,注意在这里查询...
为什么会这样?为什么没有任何查询,没有错误,什么都没有。
当您 setOwner
并且不保存 x 时,它没有任何效果。此外,如果您有约束 nullable=false
,则不能将其设置为空。
你想做什么?您要删除发票并保留所有者身份吗?然后你应该删除 orphanRemoval = true
.
否则,如果您想删除孤儿,请保持原样,只删除发票而不将所有者设置为空。它将自动删除孤立的所有者。
如果您想手动管理它们,请不要设置外键并破坏它们之间的关系,只需在需要时删除任何记录并自行设置字段为空或值。
另外,您也可以使用仓库的方法delete(Iterable iterable)
一次性删除多个