【发布时间】:2013-09-13 14:22:48
【问题描述】:
我的要求是通过 5 种方法将数据保存在 5 个表中。 这 5 个方法封装在单个父方法下,并用 @Transactional 注释。
循环调用这个父方法 100 次。
约束是
即使一个方法在一次迭代中失败,也必须回滚事务。(即必须毫无例外地保存 5 个方法)并且流程应该继续进行下一次迭代。
一个迭代失败不应回滚所有其他迭代。 I.,e 在 100 次迭代中,如果第 5 次迭代失败并且所有其他迭代都成功,则应提交所有 99 次迭代的操作。
在一次迭代中成功执行完所有5个方法后提交事务即可。
问题是
- 如果第 5 次迭代失败,则在下一次迭代中,旧值将显示在实体中。
我在 catch 块中使用了 session.clear() 方法来避免这种情况。那是对的吗?但问题是,
即使在下一次迭代中成功插入五个方法后,事务也会回滚。并且会话中前 4 次迭代的所有数据状态都将被清除。
我正在使用 Spring 3.2、Hibernate3、HibernateTransactionManager
【问题讨论】:
标签: spring hibernate spring-transactions