@Transactional(rollbackFor = Exception.class) public List<OnlineErrorMsg> addOnline(DesignDictDataOnlineReq req) { List<OnlineErrorMsg> group = checkReq(req, true); if (group != null) { return group; } DesignDictData designDictData = new DesignDictData(); BeanUtils.copyProperties(req, designDictData); designDictData.setId(IdWorker.getId()); DesignDictData previous = designDictDataMapper.selectById(req.getDesignDictDataId()); AssertUtil.ifNullThrow(previous, "查不到数据"); designDictData.setImportOrder(previous.getImportOrder() + 1); List<DesignDictData> gtList = designDictDataMapper.selectList(new LambdaQueryWrapper<DesignDictData>() .eq(DesignDictData::getDesignDictId, req.getDesignDictId()) .ge(DesignDictData::getImportOrder, designDictData.getImportOrder())); gtList.forEach(e -> e.setImportOrder(e.getImportOrder() + 1)); designDictDataMapper.insert(designDictData); if (CollectionUtil.isNotEmpty(gtList)) { designDictDataMapper.updateBatch(gtList); } updateDesignDict(req.getDesignDictId()); this.doRecordLog(req.getDesignDictId(), VersionOperationEnum.ADD, null, designDictData); return null; }
时间: 2024-03-28 20:38:06 浏览: 111
这段代码是一个Java方法,用于添加在线数据。其中,@Transactional(rollbackFor = Exception.class) 注解表示该方法在执行过程中如果出现异常需要回滚事务,保证数据一致性。方法的参数是一个请求对象 DesignDictDataOnlineReq,返回值是一个 OnlineErrorMsg 对象列表。方法的主要逻辑是:
1. 调用 checkReq 方法对请求参数进行校验,如果校验不通过则直接返回错误信息列表。
2. 创建一个 DesignDictData 对象,并将请求对象的属性拷贝到 DesignDictData 对象中,并生成一个唯一的 ID。
3. 根据请求对象中的 designDictDataId 属性查询出上一条在线数据。
4. 将新的在线数据的 importOrder 属性设置为上一条在线数据的 importOrder 属性加上 1。
5. 根据请求对象中的 designDictId 属性查询出所有 importOrder 大于等于新的在线数据的 importOrder 的在线数据,并将这些在线数据的 importOrder 属性都加上 1。
6. 将新的在线数据插入数据库中,并根据查询出来的在线数据更新数据库中的在线数据。
7. 调用 updateDesignDict 方法更新在线数据对应的字典数据的修改时间。
8. 调用 doRecordLog 方法记录在线数据的操作日志。
9. 返回 null。
相关问题
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED
对于`@Transactional`注解,加上`rollbackFor = Exception.class`参数的作用是指定当出现异常时需要回滚事务。如果不加这个参数,默认情况下,只有在出现未检查异常(继承自`RuntimeException`)时才会回滚事务。而加上这个参数后,无论出现什么类型的异常都会回滚事务。
另一种解决方法是在`@Transactional`注解上不加`rollbackFor`属性,而是在`try-catch`块中的`catch`中调用回滚方法来实现事务的回滚。
根据提供的代码示例来看,在`@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)`注解中,设置了事务的传播属性为REQUIRED,这意味着如果当前方法调用了其他有事务的方法,它会加入到这个事务中。同时,设置了回滚策略为出现任何异常都会回滚事务。
所以, `@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)`表示使用了默认的传播属性和设置了在出现任何异常时回滚事务。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
@Transactional(rollbackFor = Exception.class)
在使用注解@Transactional(rollbackFor = Exception.class)时,它可以用于回滚所有的异常,包括RuntimeException及其子类抛出的异常,以及Exception异常。 默认情况下,@Transactional注解只会回滚RuntimeException及其子类抛出的异常。 如果需要回滚Exception异常,可以显式地使用@Transactional(rollbackFor = Exception.class)注解来声明。 所以,如果你在进行增删改操作时,建议使用@Transactional(rollbackFor = Exception.class)来确保在出现任何异常时都能进行回滚操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
阅读全文