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