java - ORA-02292 : integrity constraint (xxx) violated - child record found

标签 java hibernate spring-boot oracle10g

如何使用 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,最好的删除方法应该是在父实体上调用一次删除

如果您尝试删除子项, hibernate 状态可能会将删除传播到仍有子项尚未删除的父项上。

解决这个问题的最后手段是:

  1. 启用logs on Spring Boot Application
  2. 运行 SQL Server 中生成的 SQL 查询
  3. 评估当前数据库状况,查找错误发生的位置
  4. 如有必要,请更改 JPA

关于java - ORA-02292 : integrity constraint (xxx) violated - child record found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760807/

相关文章:

java - 如何从Sql中插入和获取数据

javascript - 解析文件在 textView Android 中显示随机字母数字文本

java - 由于 'org.hibernate.HibernateException: No Session found for current thread' 异常,需要 @Transactional 注释

hibernate - Grails独特的约束

java - Spring/Hibernate - 忽略重复条目并继续插入

java - Spring boot - 错误的 TCP 连接处理

java - Spring Boot Rest Web服务在Get Request中获取多个参数

java - @RequestMapping未获取参数和值。Spring框架

java - eclipselink 不获取列表

java - Android 改造 Base64 @Body