Hibernate Annotation使用非null外键进行双向关系级联删除

时间:2012-05-15 15:02:45

标签: hibernate cascade cascading-deletes bidirectional notnull

当对Order(父级)执行删除时,hibernate正试图级联删除子级。它不是先删除子项,而是尝试将外键清空,然后删除父项,然后删除子项。

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

表格和相关栏目

顺序

id - PK,int,not null

OrderResult

id - PK,int,not null order_id - FK,int,not null

实体规范

顺序

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

OrderResult

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

1 个答案:

答案 0 :(得分:0)

您的代码的问题是Cascade DELETE设置正确。这就是为什么当你删除User时,DELETE动作不是级联的,即删除OrderResult。它通过将参考值设置为NULL来更新OrderResult,因为Order已被删除。

要解决此问题,请更改Order课程:

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

希望有所帮助。