Hibernate删除只是不会开火

问题描述 投票:0回答:1

我以前曾经问过这个,但仍然不知道发生了什么......

我已经读过关于在删除之前需要清除关系的实体,以及关于父实体中的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);
    }

进入循环z列表大小是314,并且有我期望的所有实体。然后我尝试将setOwner设置为null,因为这是与父元素的唯一关系。

归零所有者后,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调试显示甚至没有尝试删除任何东西,注意在这里查询...

为什么会这样?为什么没有任何疑问,没有错误,没有任何错误。

java hibernate repository jpa-2.0
1个回答
1
投票

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

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

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

如果要手动管理它们,请不要设置外键并断开它们之间的关系,只需删除任何记录,并将字段设置为null或value。

此外,您还可以使用存储库的delete(Iterable iterable)方法一次删除多个。

© www.soinside.com 2019 - 2024. All rights reserved.