必须加@Transactional事务注解才能成功插入数据,原因未知。

本文介绍了一个名为patentFlowManagementProject的项目中,不使用事务注解导致数据插入失败且无错误提示的问题。通过加入@Transactional注解,确保了数据操作的完整性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目名:patentFlowManagementProject

如果不加事务注解,数据插入失败而且无任何报错,很诡异。

    @Override
    @Transactional
    public void joinPrefecture(String prefectureId, String userId) throws Exception {
        Prefecture prefecture = findById(Prefecture.class, prefectureId);
        Applicant applicant = findById(Applicant.class, userId);
        PrefectureApplicant prefectureApplicant = new PrefectureApplicant();
        prefectureApplicant.setId(UUIDGenerator.randomUUID());
        prefectureApplicant.setType("applying");
        prefectureApplicant.setPrefecture(prefecture);
        prefectureApplicant.setApplicant(applicant);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        prefectureApplicant.setTime(simpleDateFormat.format(new Date(System.currentTimeMillis())));
        System.out.println(prefectureApplicant.toString());
        System.out.println(prefectureApplicant.getId());
        System.out.println(prefectureApplicant.getTime());
        System.out.println(prefectureApplicant.getType());
        save(prefectureApplicant);
    }
@Override public AjaxResult selectDSById(Integer id) { try { DataSource dataSource = this.datasourceMapper.selectById(id); if (dataSource != null) { if (Constant.DS_TYPE_FILE.equalsIgnoreCase(dataSource.getDsType())) { DataSourceFile dataSourceFile = this.dataSourceFileMapper.selectOne(new QueryWrapper<DataSourceFile>() .eq("datasource_id", dataSource.getId())); dataSource.setDataSourceFile(dataSourceFile); } else if (Constant.DS_TYPE_DB.equalsIgnoreCase(dataSource.getDsType())){ DataSourceDB dataSourceDB = this.dataSourceDBMapper.selectOne(new QueryWrapper<DataSourceDB>() .eq("datasource_id", dataSource.getId())); dataSource.setDatasourceDB(dataSourceDB); } else if (Constant.DS_TYPE_API.equalsIgnoreCase(dataSource.getDsType())){ DataSourceApi dataSourceApi = this.dataSourceApiMapper.selectOne(new QueryWrapper<DataSourceApi>() .eq("datasource_id", dataSource.getId())); dataSource.setDataSourceApi(dataSourceApi); } else { throw new RuntimeException("未知数据源类型!"); } } return AjaxResult.success("数据源详情查询成功!", dataSource); } catch (RuntimeException e) { log.error("数据源详情查询异常:", e.getMessage()); return AjaxResult.error("数据源详情查询异常,请联系管理员! 异常原因: ", e.getMessage()); } } /** * 数据源新增和修改 * @param dataSource * @return */ @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public AjaxResult addOrUpdateDataSource(DataSource dataSource) { try { if (dataSource == null) { return AjaxResult.error("参数数据不能为空"); } QueryWrapper<DataSource> queryWrapper = new QueryWrapper<DataSource>().eq("ds_name", dataSource.getDsName()); if (dataSource.getId() != null) { queryWrapper.ne("id", dataSource.getId()); } DataSource existingDataSource = datasourceMapper.selectOne(queryWrapper); if (existingDataSource != null) { return AjaxResult.warn("数据源名称不能重复!"); } if (dataSource.getId() == null) { datasourceMapper.insert(dataSource); } else { datasourceMapper.updateById(dataSource); } DataSource newDataSource = this.datasourceMapper.selectOne(new QueryWrapper<DataSource>().eq("ds_name", dataSource.getDsName())); if (newDataSource == null) { return AjaxResult.error("数据源子表信息添失败!"); } String dsType = dataSource.getDsType(); if (Constant.DS_TYPE_FILE.equalsIgnoreCase(dsType)) { handleFileData(dataSource.getDataSourceFile(), newDataSource.getId()); } else if (Constant.DS_TYPE_DB.equalsIgnoreCase(dsType)) { handleDBData(dataSource.getDatasourceDB(), newDataSource.getId()); } else if (Constant.DS_TYPE_API.equalsIgnoreCase(dsType)) { handleApiData(dataSource.getDataSourceApi(), newDataSource.getId()); } else { throw new RuntimeException("未知数据源类型!"); } return AjaxResult.success("数据源新增修改成功!"); } catch (Exception e) { // 手动标记事务回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); log.error("数据源操作异常:", e); return AjaxResult.error("数据源操作异常,请联系管理员! 异常原因: ", e.getMessage()); } } /** * 数据源删除(以及关联子表) * @param id * @return */ @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public AjaxResult deleteDataSource(Integer id) { try { DataSource dataSource = datasourceMapper.selectById(id); if (dataSource == null){ throw new BaseException("数据已被删除 或 不存在!"); } // 删除主表数据 int ds = datasourceMapper.deleteById(id); if (ds <= 0) { throw new BaseException("主表数据删除失败"); } if (Constant.DS_TYPE_FILE.equalsIgnoreCase(dataSource.getDsType())){ // 删除子表数据 int dsFile = dataSourceFileMapper.delete(new QueryWrapper<DataSourceFile>().eq("datasource_id", id)); if (dsFile < 0) { throw new BaseException("文件子表数据删除失败"); } }else if (Constant.DS_TYPE_DB.equalsIgnoreCase(dataSource.getDsType())){ int dsDB = dataSourceDBMapper.delete(new QueryWrapper<DataSourceDB>().eq("datasource_id", id)); if (dsDB < 0) { throw new BaseException("数据库子表数据删除失败"); } }else if (Constant.DS_TYPE_API.equalsIgnoreCase(dataSource.getDsType())){ int dsApi = dataSourceApiMapper.delete(new QueryWrapper<DataSourceApi>().eq("datasource_id", id)); if (dsApi < 0) { throw new BaseException("API子表数据删除失败"); } }else { throw new BaseException("要删除的数据源类型异常,请联系管理员!"); } return AjaxResult.success("数据源删除成功", true); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); log.error("数据源删除异常:", e); return AjaxResult.error("数据源删除失败,请联系管理员", false); } } private void handleFileData(DataSourceFile dataSourceFile, Long dataSourceId) { if (dataSourceFile == null) return; dataSourceFile.setDatasourceId(dataSourceId); if (dataSourceFile.getId() == null) { dataSourceFileMapper.insert(dataSourceFile); } else { dataSourceFileMapper.updateById(dataSourceFile); } } private void handleDBData(DataSourceDB dataSourceDB, Long dataSourceId) { if (dataSourceDB == null) return; dataSourceDB.setDatasourceId(dataSourceId); if (dataSourceDB.getId() == null) { dataSourceDBMapper.insert(dataSourceDB); } else { dataSourceDBMapper.updateById(dataSourceDB); } } private void handleApiData(DataSourceApi dataSourceApi, Long dataSourceId) { if (dataSourceApi == null) return; dataSourceApi.setDatasourceId(dataSourceId); if (dataSourceApi.getId() == null) { dataSourceApiMapper.insert(dataSourceApi); } else { dataSourceApiMapper.updateById(dataSourceApi); } }代码优化一下
最新发布
07-30
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值