ORA-02292:违反完整性约束(xxx)-找到子记录

时间:2018-10-11 13:05:24

标签: java hibernate spring-boot oracle10g

如何使用休眠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查询,但该方法也使我无处不在。

究竟该如何一致地删除所有这些实体? 到目前为止,自这个问题开始以来,我已经手动删除了表格(几天前删除了所有实体都很好),但是那确实让我很烦,但是我不知道该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:1)

您已经在父级上设置了curl -X GET 'localhost:9200/?pretty',最好的删除方式应该是在父级实体上调用一次删除

如果您尝试删除一个孩子,则它可以处于休眠状态,并在尚有尚未删除的孩子的父母上传播delete。

这个问题之王的最后选择是:

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