问题描述
我要删除的表记录在整个系统中有很多外键,我在service删除org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch updateCaused by: java.sql.BatchUpdateException: ORA-02292: 违反完整约束条件 (DCMIS.FK_DZ_GZHB_CYXX_ID_DZ_CYXX) - 已找到子记录但是在service里面又无法捕获这个异常,请问怎么才能捕获这个异常。问题补充:runtime异常无法捕获,但是它在后台还是要报异常错误,这对系统的健壮性有影响吗问题补充:比如我是在A实体里这样配置,这就是一个外键关系关联SysGroup 这个实体@ManyToOne(cascade = { CascadeType.MERGE })@JoinColumn(name = "parentid")private SysGroup sysGroup;然后删除sysGroup实体的时候就要报错
解决方案
这是个运行期的runtime异常,应该是无法捕获的,系统自动会抛出异常
解决方案二:
不是说了,你正确的配置好实体的关系,他就不会报runtime的错误了他报了说明你没有正确的配置他们的关系,可能就简单得配置了下,只能新增不能删除这种问题就是配置的问题
解决方案三:
这个是runtimeException一般如果抛runtime异常的话,不是你程序写得有问题就是无法处理的异常这种异常一般最外层捕获后对事务进行回滚,因为你捕获了也没用他抛runtimeException就是不想让你捕获的请修改自己的程序来解决这个问题比较好如果你另外一个外键对应的对象也用hibernate映射的话,请配置他们的关系,同时配制当删除A时同时删除BA: cascade="none" update="true" delete="true" B: inverse="true" cascade="all"
解决方案四:
一直向外抛(throws)dao -- service -- action在合适的位置捕获