在整合springmvc+hibernate+spring时用到事物的知识,但遇到事物无法回滚的问题。
问题描述:
业务代码:
1.
在service层进行搜索其他表的相关信息。
2.
在dao层进行查询数据,这里是当查询的数据为空或者查询出现异常的时候抛出一个RuntimeException给service层
3.
service层捕获到信息,并打印日志,且返回一个json数据格式的错误信息
4.
这是我的spring配置文件中配置事物的信息。
由于在步骤1的红框所标识的地方因为可能dao层查询原因或者是查询数据为空而抛出来的RuntimeException,在service层被捕获到。但是问题出现在,service层捕获到这个异常后,如果按照上述那样写,前台能接受到这样的json数据。但是数据库中会存入orderVO的信息,而后面PurchaseRecordVO的信息由于出现异常无法存入。这里就造成数据没有完全存入。虽然spring的配置文件中配置了事物,但并没有进行事物回滚,也就是orderVO信息并没有回滚。
解决方法
方法1:
service层捕获到异常后继续抛给上层(我这里是action层)一个RuntimeException。
,然后在上层action层try....catch一次捕获到异常,并对异常进行处理。这样能事物回滚
方法二
直接在service层的catch中捕获到异常后加上上述这句话,手动回滚事物。
参考文章:http://www.360doc.com/content/12/1109/18/6161903_246870991.shtml