Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Hibernate:删除父实体会触发对子实体的更新查询_Mysql_Spring_Hibernate_Cascade - Fatal编程技术网

Mysql Hibernate:删除父实体会触发对子实体的更新查询

Mysql Hibernate:删除父实体会触发对子实体的更新查询,mysql,spring,hibernate,cascade,Mysql,Spring,Hibernate,Cascade,形势 我有一对JPA实体的父子关系。 父对象称为JobTemplate,并将子对象称为: @OneToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST}, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "job_template_id") private List<ChecklistTemplateEntry> checklistEntries

形势

我有一对JPA实体的父子关系。 父对象称为JobTemplate,并将子对象称为:

@OneToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST}, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "job_template_id")
private List<ChecklistTemplateEntry> checklistEntries = new ArrayList<>();
在mySQL服务器中,有一个级联设置。子表的创建命令说明:

 FOREIGN KEY (job_template_id) REFERENCES job_template(id) ON DELETE CASCADE 
如果通过手动键入sql命令来删除实体,则级联工作正常

问题

当我试图通过调用JPA(spring boot repository)删除父实体时

jobTemplateRepo.delete(jobTemplateToDelete); //from CrudRepository
JPA在子表上触发更新查询:

update checklist_template_entry set job_template_id=null where job_template_id=?
mySQL不接受此查询,因为job_template_id有一个NOTNULL规则(有充分的理由)。 结果是我无法删除我的实体。我得到:

java.sql.SQLException: Column 'job_template_id' cannot be null
目标

我想在创建/更新操作中使用从父级到子级的JPA级联。但是,当删除父实体时,我希望JPA只在该实体上触发一个删除查询,而不尝试更新子实体,因为这会导致问题,mySQL将处理这些问题

我尝试过的

  • 级联的各种组合,包括全部、除移除以外的全部等
  • 启用/禁用两侧的延迟加载

您错过了双向注释一侧的“mappedBy”参数,从而有效地创建了两个单向关系。
用mappedBy参数替换一侧的JoinColumn,您应该得到正确的delete语句。

我认为您错过了“mappedBy”"一方的论据,bidirection@MartinFrey您刚刚救了我一天!在父实体类的OneToMany注释中用mappedBy参数替换JoinColumn注释解决了我的问题。您是否尝试过将OrphanRemoving=true改为OrphanRemoving=false?数据库正在处理该问题。@MartinFrey您能发布此消息吗作为回答,以便我能将其标记为已接受回答?Thanks@PeterHe如果我没有弄错的话,删除孤立项对于更新操作很有用,以防您从集合中删除实体。我需要这个功能。。。
java.sql.SQLException: Column 'job_template_id' cannot be null