【问题标题】:Cannot delete a parent row: a foreign key constraint fail无法删除父行:外键约束失败
【发布时间】:2021-09-03 17:09:57
【问题描述】:

我有 2 个实体(用户、教师),用户是父亲...

当我想通过本机查询删除用户时,它会给我这个错误 (Cannot delete or update a parent row: a foreign key constraint fail)

虽然我写过:

@OneToOne(mappedBy = "user_id",fetch = FetchType.EAGER,
    cascade = CascadeType.ALL  , orphanRemoval = true )

在用户实体中的 Teacher 引用处 但是当我尝试使用 JPA 派生方法 deleteByEmail() .. 它奏效了!

是什么原因?

【问题讨论】:

  • 启用 sql 日志记录我猜 spring data jpa 可能正在执行 2 个 SQL 查询来删除这些行。
  • 在 JPA 中启用 SQL 日志记录,您将看到两种情况下查询的差异。在第一种情况下,由于外键约束,删除失败。对于第二种情况,很可能首先发生子删除,因此不会引起问题。
  • 是的,我知道,这就是发生的事情,但是对于本机查询,由于级联类型正确,它还必须删除 2 个实体!!!??

标签: java sql spring spring-boot jpa


【解决方案1】:

级联不适用于查询。

当您使用 EntityManager 或 Hibernate ORM Session 中的方法更改实体的状态时,它会起作用。

您可以在 Hibernate ORM 文档中查看示例列表: 5.15. Cascading entity state transitions.

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2019-05-25
    • 2014-11-11
    • 2018-05-12
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多