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