问题描述
事务配置在service层中,service中方法s调用了dao层两个方法save和update,,/**假设事务已配置(service层中)**//***模拟service层的s方法*/publicvoids(){//保存成功,则updateif(save()){update();}}/***模拟dao层的save方法*@return*/publicbooleansave(){booleanflag=false;try{//hibernate的save方法flag=true;}catch(){flag=false;}finally{returnflag;}}/***模拟dao层的update方法*/
假设save的时候sql语句写错了在dao层save会不会报异常,我测试的时候dao层的save不会报异常,直接运行try里面的代码和finally里面的代码,然后继续执行service中s方法,执行快结束时出了异常,我觉得是事务在service层,提交事务时菜发sql语句,所以出异常,现在问题是这个异常是什么异常,我在dao层的save方法捕获异常有没有作用,(好像没有作用,不确定),当事务申明在service层时,dao层是不是就可以不考虑异常情况了,还是要考虑?亦或是通过throws抛出可能发生的异常,最后请大神讲讲事务处理sql异常的机制,申明试事务肯定是要通过反射处理的,我的想法:sql语句那行代码执行了,但是没有事务提交,不算真正的发sql语句,在dao层try-catch是没有作用的,需要向上抛出可能出现的异常,在service层也是向上抛出或是try-catch
解决方案
解决方案二:
解决方案三:
在service处理异常dao层可以考虑往上抛不需要处理2遍啦浪费性能
时间: 2024-12-02 22:26:21