mysql - 无法删除父项和子项

标签 mysql spring hibernate

我有两个使用 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 的外键时,它显示“更新时受限”和“删除时受限”

最佳答案

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

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

关于mysql - 无法删除父项和子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46787747/

相关文章:

java - 如何使用Java实现数字自动递增

mysql - SQL中查找数据库中所有表的最大值

java - 在 Java 中使用注释验证字符串列表

java - UUID 作为 @ManyToOne hibernate 中的外键

java - hibernate MySQL

通过 cPanel 创建的 MySql 用户在尝试登录时获取 'access denied'

mysql - 在 SQL 查询中使用 else

java - 使用 WebSecurityConfigurerAdapter 而不是 WebMvcConfigurerAdapter 添加 HandlerInterceptor

java - 自动计算字段和用户输入值的设计模式

java - 如何将数据库表中的空字段映射为 double ?