如何使用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
,最好的删除方式应是在父级实体上调用一次删除
如果您尝试删除一个孩子,则它可以处于休眠状态,并在仍然没有删除孩子的父对象上传播删除。
这个问题之王的最后一招是:
启用logs on Spring Boot Application
运行在SQL Server中生成的SQL查询
查找错误发生在哪里,评估当前数据库条件
必要时更改JPA