SSH里,环绕通知破坏事务原子性问题

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:11:22
SSH项目
所有功能已经完美实现
其中有二个操作数据库方法

addJack()//添加用户Jack
addLucy()//添加用户Lucy

这两个方法必须具有事务性,也就是说,要么Jack和Lucy都添加到数据库,要么都不添加
这个功能也实现了,用的是spring的 声明式事务
[确实已经实现:当我已经添加Jack了,再添加Lucy时,我人为抛了个运行时异常
这时已经添加的Jack也会跟着回滚掉]

现在突然来了一个要求
要求我判断Jack和Lucy的合法性,合法加,不合法不加[当然,只要有一个不合法,两个都是添加不进去的]
我为了不破坏原来的代码
使用了spring的'环绕通知'去拦截,拦截到不合法的参数时,我就不执行addJack(),或者不执行addLucy()

现在有一个问题
加jack时,是合法的,拦截器放过去,jack也添加了
但是随后而来的lucy是非法的,拦截住了,没有执行addLucy()

但是但是但是,刚刚进去的jack已经永远的进入数据库了,没有回滚掉!!

我在想,可不可把拦截器也放到那一个事务里,当拦截器发现有非法参数
能不能得到当前事务的控制权,手动进行事务的回滚呢???

望高手赐教!!!

SSH版本: struts 1.X spring 2.9 hibernate 3.2

再次感谢!!!

个人觉得,为啥不在环绕通知里对两个数据的合法性同时进行验证,要一个一个验证呢,如果都合法之后才进行数据持久化呢。

一个业务中, 有一个不合法 ,这个操作肯定不能进行下去啊, 这还要问, 不合法,就说明这个业务不能持久化