1

当对订单(父级)执行删除时,休眠尝试级联删除子级。它不是首先删除子项,而是尝试使外键无效,然后删除父项,然后删除子项。

有没有办法更改我的配置以允许先删除子项,然后删除父项?绕过取消外键的步骤?

表格和相关列

命令

id - PK,整数,不为空

订单结果

id - PK,int,非空 order_id - FK,int,非空

实体规范

命令

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "CLOrderID")
public List<OrderResult> getOrderResults() {
    return orderResults;
}

订单结果

@ManyToOne
@JoinColumn(name = "CLOrderID", nullable = false)
public Order getOrder() {
    return order;
}
4

1 回答 1

0

您的代码的问题是 Cascade DELETE 设置正确。这就是为什么当您删除用户时,DELETE 操作不会级联,即,也删除 OrderResult。相反,它通过将引用值设置为 NULL 来更新 OrderResult,因为 Order 已被删除。

要修复它,请更改您的Order课程:

@OneToMany(cascade = CascadeType.ALL, mappedBy="order")
public List<OrderResult> getOrderResults() {
    return orderResults;
}

希望它有所帮助。

于 2012-09-17T09:54:24.663 回答