Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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
Java Hibernate 5.2我的表postgres上的级联删除_Java_Postgresql_Hibernate_Jpa - Fatal编程技术网

Java Hibernate 5.2我的表postgres上的级联删除

Java Hibernate 5.2我的表postgres上的级联删除,java,postgresql,hibernate,jpa,Java,Postgresql,Hibernate,Jpa,我有两个互相依赖的班级。我想做一个级联删除。问题I有以下错误: 无法执行语句;SQL[n/a];约束[fk5o18odcs53r4t69hbgf35haj3];嵌套异常为org.hibernate.exception.ConstraintViolationException:无法执行语句 公共类工作区{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) @列(name=“id”,nullable=false,updateable=false) 私人长id;

我有两个互相依赖的班级。我想做一个级联删除。问题I有以下错误:

无法执行语句;SQL[n/a];约束[fk5o18odcs53r4t69hbgf35haj3];嵌套异常为org.hibernate.exception.ConstraintViolationException:无法执行语句

公共类工作区{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”,nullable=false,updateable=false)
私人长id;
@列(name=“name”,nullable=false,unique=true)
私有字符串名称;
私有字符串描述;
@CreationTimestamp
@列(name=“created_at”)
私人日期创建日期;
@UpdateTimestamp
@列(name=“updated_at”)
私人日期更新日期;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.REMOVE,orphanremove=true)
私人清单项目;
公共无效集合id(长id){
this.id=id;
}
公共列表项目(){
返回项目;
}
公共项目(列出项目){
这个项目=项目;
}
}
@实体
@表(name=“项目”)
公共类项目{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”,nullable=false,updateable=false)
私人长id;
@列(name=“name”,nullable=false)
私有字符串名称;
@manytone(fetch=FetchType.LAZY)
私人工作空间;
私有字符串描述;
@CreationTimestamp
@列(name=“created_at”)
私人日期创建日期;
@UpdateTimestamp
@列(name=“updated_at”)
私人日期更新日期;
问题是用我的JPA创建的表没有在删除规则中定义级联类型。
是否必须通过sql直接定义约束类型?JPA Hibernate是否可以不定义这些约束?

您需要为工作空间类OneToMany关系指定mappedBy参数

@OneToMany( fetch = FetchType.LAZY,cascade = CascadeType.REMOVE,orphanRemoval = true, mappedBy = "workspace") 
private List<Project> projects;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.REMOVE,orphandremove=true,mappedBy=“workspace”)
私人清单项目;

之后,您可以删除工作区,所有项目也将被删除。

这是一个纯JPA/Hibernate相关的问题,这里不应该涉及Spring Boot。最好提及正在使用的Hibernate版本。我使用Spring Boot starter数据JPA版本2.0.4,它在创建的表的封面下使用了5.2.17.Final对于my JPA,不要在删除规则中定义级联类型:为什么会这样?该级联指令用于JPA提供程序处理单个删除,而不是传递到数据库。要了解发生了什么,请查看为代码调用的执行删除的SQL…因此必须始终通过以下方式添加这些类型的约束:sql罚单?