简单说一下,在serviceA.method1()中开启编程式事务,method1()中调用ApplicationLogicB的method2()方法,method2()方法中调用了deleteC()方法和insertD()方法,在deleteC()中删除了某主键唯一标示的数据库中记录,然后在insertD()中插入该主键的数据库记录,现在用try catch将对insertD()的调用围绕起来,捕捉异常,然后根据异常的类型和错误信息。若为由于数据生僻字导致的异常,则在catch中修正数据,然后重新执行insertD()方法。问题来了,重新执行insertD()方法时,总报出重复主键错误。期待对此问题有了结的朋友帮忙。serviceA{method1(){//启动编程式事务try{method1();}catch(Exception e){//失败,回滚}//成功,提交}method1(){applicationLogicB.method2();}}Application LogicB{method2(){deleteC();try{insertD();}catch(Exception e){//判断异常类型if(e.getInitCause().XXX && e.getMessage().contains("xxxx"){//修正插入数据中的错误数据,然后重新插入。在这里报出了重复主键错误!insertD();}else{throw e;}}}deleteC(){//删除数据库中某记录}insertD(){插入数据库中某记录}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货