【问题标题】:Cannot delete parent and child不能删除父母和孩子
【发布时间】:2018-03-29 00:05:18
【问题描述】:

我有两个使用 Spring 和 Hibernate 的实体

实体 A:

@Entity
@Table(name = "A")
public class A {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "a")
    private B b;

这里我和实体 B 是一对一的关系,关系的所有者是实体 A。

实体 B:

@Entity
public class B{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToOne
    @JoinColumn(name = "a_ID")
    private A a;

保存实体没有问题。实体 B 获取数据库中实体 A 的 ID。 但是当我删除实体 A 时,我也想删除属于 A 的实体 B。

当我删除我得到错误:

MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails

我认为我在实体中的声明是正确的。这里有什么问题?

编辑

当我检查实体 B 的表,特别是实体 A 的外键时,它显示 Restricted on Update en on Delete

【问题讨论】:

标签: mysql spring hibernate


【解决方案1】:

在 A 类中将 orphanRemoval 属性设置为 true

像这样:@OneToOne(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true)

【讨论】:

  • 父类中有子实体的删除方法吗?
  • 是的,我在实体 A 中放置了 orphanRemoval = true。如果我理解正确,实体 A 是父级。
  • 您应该在 A 类中添加和删除实体方法,如下所示: public void removeB() { if (b!= null) { b.setA(null); } 这个.b=空; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 2017-06-30
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多