//[一个类中的两个方法]@Transactional
public void insertData(List<User> users,List<JdbcTemplate> jdbtTemplateList) {
   for(int i=0;i<users.size();i++)
   {
      insertData(users.get(i), jdbtTemplateList);
    }
}public void insertData(User user,List<JdbcTemplate> jdbtTemplateList){
        for(int i=0;i<jdbtTemplateList.size();i++){
userDao.insertUser(user, jdbtTemplateList.get(i));
}
}Spring框架,用的是跨数据源的事物管理器,jdbtTemplateList列表中的JdbcTemplate对应不同的数据源,在方法一注解@Transactional可以实现事物的回滚,有一条记录插入一个库失败,所有库都会回滚,但这样会导致所有的User对象都不能成功的插入,只要有异常产生。本人想一个User记录插入失败,只是回滚此记录,就把方法一的@Transactional注解去掉,在方法二上加上注解@Transactional,这样结果事物没有产生作用。User对象插入一个库成功,另一个库失败,没有实现回滚。
在方法二上加上注解的话,{

解决方案 »

  1.   

    是这样的。
    你这是service层,在service层加入注解使其回滚的话就是此次从操作的所有记录。
    如果你在dao层加入注解的话回滚的就是失败的那一条了
    至于你具体问啥,不是很清楚。
    引用一下追问吧、
      

  2.   

    在类上加上注解,类的所有public方法都会有事物了,还是会回滚User对象列表,不是只回滚单个User对象。
      

  3.   

    这种情况,你就应该借助AOP了。完全能解决你的问题。
      

  4.   

    小弟不才,真想不到AOP配置事物和注解配置事物有什么区别?为什么注解的配置不能实现呢?
      

  5.   

    跨数据源事务管理需要使用jta事务:JtaTransactionManager
    分析:第一种方式添加注解事务,只要一条插入失败,所有的记录都会回滚。因为在同一个方法中,循环插入只要一条失败,所有记录均会回滚,包含两个库的记录,符合理论。第二种情形方法一去掉注解事务,而在方法二上添加注解事务。结果一个库成功插入,而另外一个库操作失败,却没回滚。和刚才分析的就矛盾了。
    提供思路:仔细验证跨数据源事务到底有没有正在生效?review方法,防止事务传播行为在作怪