Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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中只删除@OneToOne双向映射的一侧_Java_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java 如何在hibernate中只删除@OneToOne双向映射的一侧

Java 如何在hibernate中只删除@OneToOne双向映射的一侧,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我在两个单独的实体中有两列 采访实体 申请实体 问题是,如何正确地映射它,以便运行service.deleteSession()并仅删除访谈实体记录? 如果我使用cascadeType.all删除申请人实体。我尝试将其更改为持久化,然后得到一个500错误,表示如果调用该函数,将重新创建实体 添加孤立删除=true时出现此异常org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];约束[null] 但是,我想把

我在两个单独的实体中有两列

采访实体

申请实体

问题是,如何正确地映射它,以便运行
service.deleteSession()并仅删除
访谈
实体记录?

如果我使用
cascadeType.all
删除
申请人
实体。我尝试将其更改为持久化,然后得到一个500错误,表示如果调用该函数,将重新创建实体

添加
孤立删除=true
时出现此异常
org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];约束[null]


但是,我想把
mappedBy
分配给
interview
实体,我不确定这是否是解决方案,而且我有保留意见,因为我的
面试
实体是在创建
申请人
实体之后创建的。

您应该只在父实体上使用
级联=…
孤儿移除=…
(在您的情况下,
申请人
)。在关联的两侧使用级联是没有意义的(对于任何关系,而不仅仅是一对一)。想想层叠会做什么,以及当您尝试创建一个新的
访谈时会发生什么
CascadeType.PERSIST
表示如果给面试对象一个申请者字段,那么
面试
实体需要创建一个
申请者
。创建申请者后,它会看到申请者实体具有
CascadeType.ALL
,这意味着它需要保留它所具有的任何
面试
字段,因此它会再次尝试创建一个
面试
,这是没有意义的,因为您已经创建了面试

我猜它为什么要删除
申请人
,是因为两边都有
删除
。Hibernate查看
面试
,认为因为它有
删除
,所以它是关联的父方,所以一旦删除
面试
,它认为不再需要
申请人
,因此也会删除该记录

Hibernate文档的状态如下:

。。。只有关联的父端才有意义将其实体状态转换级联到子级


浏览该指南中的一些示例,了解它们如何在
OneToOne
关系中使用级联。

在调用存储库中的实际删除方法之前,请将父/子实体设置为
null
。现在请尝试,谢谢。这是一种优雅的处理方式吗?看起来很混乱,因为我觉得hibernate应该处理这个…@Mr.Skip这不起作用,我得到了
org.springframework.dao.DataIntegrityViolationException:cannotexecute语句;SQL[n/a];约束[null]我两边都有空值。我们将查看转发的信息,非常感谢。
@OneToOne(cascade=CascadeType.PERSIST, orphanRemoval = true)
@JoinColumn(name = "applicant_id", nullable=false)
private Applicant applicant_id;
@OneToOne(mappedBy="applicant_id", cascade = CascadeType.ALL, orphanRemoval = true)
private Interview interview_id;