你这段代码我也没看出问题,对于Spring事务,我前不久也碰到过问题,可以一起分享下。
我在事务配置里拦截了do*()的方法,使之拥有读写权限,而其他方法都只有数据库的只读权限。
当我在代码里调用service层的query*()查询方法时,在该查询方法中又调用了同一个类中的do*()更新数据库操作的方法。这时我的代码就一直报错了,说更新操作时还是只读权限。
后来网上查了Spring代理映射机制,说是spring在你注入注释时,就会生成静态代理类,把你原先定义好的哪些方法是有事务的且什么权限,都静态生成好了。一旦在Servlet类中调用到那些方法,根据代理类预先生成的权限进行事务控制。再在service层的方法里调用其他方法时,不会更改事务控制逻辑。