【问题标题】:Hibernate Annotation Bidirectional relationship cascade delete with non null foreign key休眠注释双向关系级联删除与非空外键
【发布时间】:2012-05-23 03:08:53
【问题描述】:

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

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

表格和相关列

订购

id - PK, int, not null

订单结果

id - PK,整数,不为空 order_id - FK, int, not null

实体规范

订购

@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;
}

【问题讨论】:

  • 您是否尝试将 ManyToOne 的可选属性设置为 false?
  • 是的,我只是重试了一次。同样的问题,“无法将值 NULL 插入 'CLOrderID' 列”。
  • 你找到解决这个@JohnHelfert的方法了吗?

标签: hibernate cascade cascading-deletes bidirectional notnull


【解决方案1】:

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

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

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

希望对您有所帮助。

【讨论】:

  • 这实际上是行不通的,我尝试将级联设置为所有具有 mappedBy 关系的,它仍然抛出约束问题。
猜你喜欢
  • 1970-01-01
  • 2015-05-31
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多