java - ORA-02292: 违反完整性约束 (xxx) - 找到子记录
问题描述
如何使用 hibernate deleteAll() 删除所有条目?
我有一个具有多个@oneToMany 关系的类(具有+5000 个子实体),当我尝试执行 deleteAll 时,我得到了标题错误
oracle.jdbc.OracleDatabaseException: ORA-02292: integrity constraint (xxx) violated - child record found
我试过添加
cascade = {CascadeType.ALL}
和
orphanRemoval=true
到@OneToMany 关系类,但没有帮助。
这是与以下类的双向关系
@OneToMany(targetEntity = XXX.class, fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval=true, mappedBy = "zzz")
@Fetch(FetchMode.SELECT)
@JsonManagedReference
private List<XXX> xxx;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(targetEntity = YYY.class, fetch = FetchType.LAZY, orphanRemoval=true, cascade = {CascadeType.ALL}, mappedBy = "zzz")
@Fetch(FetchMode.SELECT)
@JsonManagedReference
private List<YYY> yyy;
带有子元素,例如
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name = "XXX", nullable=false)
@JsonBackReference
private XXX zzz;
我也尝试过 HQL DELETE 查询,但那也让我无所适从。
我到底如何一致地删除所有这些实体?到目前为止,自从这个问题开始以来,我已经手动删除了表(几天前所有实体都被删除了),但这开始让我很恼火,但我不知道该怎么做。
谢谢!
解决方案
您已在父实体上设置CascadeType.ALL
,最好的删除方法应该是在父实体上调用一次删除
如果您尝试删除一个孩子,它可以是休眠将传播删除在仍然有孩子仍未被删除的父母身上。
这个问题之王的最后手段是:
- 在 Spring Boot 应用程序上启用日志
- 运行在 SQL Server 中生成的 sql 查询
- 查找错误发生在评估当前数据库条件的位置
- 必要时更改 JPA
推荐阅读
- sql - 如何为未来价值增加价值?
- ruby-on-rails - 如何按枚举和其他列自定义顺序
- awk - 如果子字符串中存在来自另一个文件的两个字符位置,并且行 ID 匹配,则从文件中提取子字符串
- python - 为什么使用 Oracle_cx 时显示“无效长度”错误消息?
- excel - 工作表的类型不匹配错误..无法修复
- c# - 在 ViewModel 类 C# 中实例化模型类的麻烦
- sql - 交叉列之间的减法
- excel - SQL 获取错误 91 对象变量或 With 块的 VBA 更新语句
- node.js - 如何用 jest 设置媒体查询?
- bash - 在变量中存储值会增加一个字符的长度