sinat_15523495 2015-03-23 07:50 采纳率: 0%
浏览 9953

关于spring注解事务传播机制的REQUIRED和REQUIRES_NEW

这是有注解REQUIRED的方法:

 @Transactional(propagation=Propagation.REQUIRES_NEW)
 public void  updateUserRequired(int sid) {
        User user = new User();
        User user1 = null;
        user1=getUserInfo("1", null);
        user.setID("1");
        user.setNAME("w`````````````e");
        user.setPASSWORD("32141221");
        user1=getUserInfo("1", null);
        System.out.println(user1.getID()+" "+user1.getNAME()+" "+user1.getPASSWORD());
        updateUser(user);    
        user1=getUserInfo("1", null);
        System.out.println(user1.getID()+" "+user1.getNAME()+" "+user1.getPASSWORD());
            requiredService.updateTeaRequired_new();
       // throw new RuntimeException();
    }
这是有注解REQUIRES_NEW的方法:
    @Transactional(propagation=Propagation.REQUIRES_NEW)
    public void updateTeaRequired_new(){
        // TODO Auto-generated method stub
        userDao.updateTea(setTeacher());
        throw new RuntimeException();   
    }

如果REQUIRED的方法抛出runtime异常,REQUIRES_NEW不抛出异常,则REQUIRES_NEW提交,REQUIRED回滚。
但是反过来的话却是整体都回滚,这是为什么

  • 写回答

1条回答

  • haj8888888 2015-03-24 01:21
    关注

    REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择(如果updateTeaRequired_new出现异常时,会抛出异常信息到updateUserRequired方法里面.)。
    REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。(新开启一个事物,执行完updateTeaRequired_new方法后就提交了.)

    评论

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏