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 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符