java - Hibernate 尝试删除单向多对一关系中的父实体
问题描述
我在实体上有一个简单的单向多对一关系,不幸的是,它是在我无法更改的模式中定义的。
定义如下
@Entity
@Table(name="Profile")
...
public class Profile{
@ManyToOne
@JoinColumn(name="usr_id", nullable=false, updatable=false)
private User usr;
...
一切都很好。该关系通过数据库中的外键强制执行,因此 nullable = false 和 updatable = false。没有提到用户中的配置文件。当我尝试删除 Profile 时,hibernate 还会尝试删除 User 实体,该实体是其他关系的父级,因此失败。我在任何地方都没有 CascadeType 注释。
我的意图是在 usr 字段中使用此配置文件对用户进行简单引用。这是一个单向的关系。每当我删除配置文件时,用户实体都不应受到影响。当 usr 字段可能在删除之前被取消引用时,这似乎是可以实现的(我可以在休眠生成的 sql 中看到休眠尝试在删除之前将该字段设置为 null) - 但是由于外键而失败。
我正在努力做的事情可以实现吗?如果是这样,怎么做?
(如果相关的话,我在hibernate之上使用spring数据。)
更多信息:我尝试了 optional=false,它导致删除父实体行为。我已经尝试了 CascadeTypes、@OnDelete 和 NO_ACTION 的所有合适组合(仍然尝试删除用户)并定义了一个反向但由用户关系拥有的 - 到目前为止没有成功。最重要的是,我尝试了搜索功能;),这使我得出结论,这只是我的问题。如果我错过了一个已回答的问题,我将不胜感激指向正确方向的指针。谢谢。
解决方案
您是否有某种其他不可为空的关联或@ManyToOne
实体?您可以通过在例如 JDBC 驱动程序中设置断点来调试删除过程,然后将堆栈帧向下移动到级联部分以找出这种级联发生的原因。@OneToOne
Profile
Connection.prepareStatement
如果这一切都没有帮助,请创建一个重现测试用例并将问题提交给Hibernate 问题跟踪器。
推荐阅读
- javascript - 我想使用反应钩子将我的反应类组件转换为功能组件。它给出了如下错误
- json - 如何使用 react-native-localize 维护模块级翻译文件?
- ios - NSKeyedArchiver 不推荐使用的方法问题
- r - 在R闪亮的UI中插入图像以覆盖右半页
- r - 这个 JSON 文件可以用 R 构建吗?
- java - 将第二个路径添加到 excludePathPattern 无效(springboot 拦截器)
- javascript - 在角度材料保管箱中选择选项时如何调用函数?
- reactjs - 单击卡片组件中的图标按钮而不单击整个卡片
- c++ - 我试图了解模板类是如何工作的,但我不断遇到编译问题
- html - 如何将两个html元素放在同一行的相对两侧