关于spring在service层catch异常而出现无法回滚的问题的解决

来源:互联网 发布:手机网络营销策划书 编辑:程序博客网 时间:2024/05/05 20:48

这个问题是去面试的时候后来想到的。

面试官问我,你spring的事务申明是在dao层还是service层?我说我一般三层,controller,接口,dao,就这样。在dao会有多个数据操作。

我一般这样写代码。

回来后试了试controller,service,dao,中间用接口。习惯了面向接口编程。后来在事务上发现了问题。

一开始在dao层我故意在update方法中抛出这样一个异常:Column count doesn't match value count at row 1,在service层调用两个方法update和add,这两个方法组成原子性。想测试一下事务。理论上就是出现异常进行回滚没有更新也没有添加数据。

但是结果让我很诧异,添加了一条数据,那么就是没有事务失效了。(看到这个的时候我在想今天的面试官是不是想问我这个。)

资料显示说因为是捕获异常后事务将会失效。

那么我就想。我从dao层将异常往service层抛,抛到service层后再将异常往controller层抛,这样我在controller层去捕获这个异常,返回到view时候给出一个友好的界面。这样应该可以吧。

试验了一把发现确实如此。这样在service就保证了事务的原子性。


0 0
原创粉丝点击