Hibernate ORA-02292: 违反完整约束条件 已找到子记录 报错解决方法

xiaoxiao2021-02-28  34

        在执行oracal数据库数据删除时出现此错误提示,错误的意思是:

您在没有删除子表记录的情况下,删除主表记录,触发了完整性约束错误。

        解决方法: 在Hibernate 注解中使用CascadeType: cascade(级联)        级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须要删除对应的关联表信息,否则,会存有脏数据。所以,适当的做法是,删除主表的同时,关联表的信息也要同时删除,在hibernate中,只需设置cascade属性值即可。 cascade属性值及其用法分别如下:

1.CascadeType.PERSIST:级联新增(又称级联保存):对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法  例子:只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)

2.CascadeType.MERGE:级联合并(级联更新):若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法  例子:指A类新增或者变化,会级联B对象(新增或者变化)

3.CascadeType.REMOVE:级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法 例子:REMOVE只有A类删除时,会级联删除B类;

4.CascadeType.REFRESH:级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据   (用的比较少)5.CascadeType.ALL:以上四种都是

综上所述:一般的,用CascadeType.MERGE:级联合并(级联更新)就能达到级更新同时又稳定不报错。

具体写法如下:

这里有个细节要注意,使用CascadeType时要导的jar包是

import javax.persistence.CascadeType;

不然会一直报错。

转载请注明原文地址: https://www.6miu.com/read-2630348.html

最新回复(0)