使用OneToMany做联级删除的时候发现无法删除,提示Error Code: 1048, SQL State: 23000 Column 'table_id' cannot be null,debug发现hibernate会执行update 子表 set table_id = null where id=?,并且没有执行删除语句;
通过查询总结两种解决方法:
1. 上文中无法联级删除是通过deleteById(Entity entity)来进行的删除,有文章提到不支持这种情况的联级删除,其实通过在@OneToMany字段中,在@JoinColumn(name="p_id", updatable=false)可以实现联级删除,例如:
@OneToMany
@JoinColumn(name="p_id", updatable=false)
private List<Children> children;
2. 改为delete(entity)来实现删除
Question:
1. 想知道为什么加上updatable=false就可以实现联级删除,并且JPA(hibernate)删除的时候就没有出现update语句,而没有updatable=false,为什么会先执行更新(update table)语句?
2. JoinColumn属性的具体意义?源码中包括以下属性,但是没有找到解释
// javax.persistence.JoinColumn
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package javax.persistence;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.a
解决Hibernate @OneToMany 联级删除问题

在使用Java的Hibernate和@OneToMany进行级联删除时遇到错误:Error Code: 1048, SQL State: 23000。原因是Hibernate尝试先更新子表而非删除。通过在@JoinColumn添加updatable=false属性或者使用delete(entity)方法可以解决此问题。了解@JoinColumn属性的意义,包括其在JPA中的作用和如何影响级联操作。"
126000475,4130177,在同一JVM中运行多个Spring Boot应用,"['Java', '开发语言', 'Spring框架', '微服务', '单元测试']
最低0.47元/天 解锁文章
909

被折叠的 条评论
为什么被折叠?



