项目实战[email protected] 的使用

@Transactional 介绍  

  Spring 事务管理分为编码式和声明式的两种方式,编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。@Transactional属于声明式事务中(两种)的一种,另一种是通过在配置文件(xml)中做相关的事务规则声明。我这里就不解释@Transactional注解管理事务的实现步骤了,直接用项目实战的例子说明为什么要用到@Transactional。

需求说明

  公司项目中的合同表的信息是通过第三方接口传数据,我需要写一个合同数据的保存接口,合同表中有一个是合同主表,另一个是合同明细表,明细表中冗余了合同主表的id。对于数据的保存肯定得保证完整性,不能有遗漏,必须全部保存,如果保存的过程中有报错就不能执行保存操作,这时@Transactional就起到作用了,它能够保证合同信息及其明细信息完整的保存。

@Override@Transactional(transactionManager = "userDataSourceTxManager")public Long addSingleContractInfo(AddContractInfoReqDto addContractInfoReqDto) {
    if(null==addContractInfoReqDto){
        throw new BizException(ExampleExceptionCode.REQ_PARAM_NON_NULL.getMsg());
    }
    //保存合同主表信息
    ContractEo contractEo = ContractEo.newInstance();
    DtoHelper.dto2Eo(addContractInfoReqDto,contractEo);
    contractEo.setUpdateTime(addContractInfoReqDto.getUpdateDate());
    contractDas.insert(contractEo);
    //保存合同商品详情信息
    List<ContractItemDetailReqDto> itemDetailReqDtos = addContractInfoReqDto.getItemDetailReqDtoList();
    itemDetailReqDtos.stream().forEach(dto->{        ContractItemDetailEo contractItemDetailEo= ContractItemDetailEo.newInstance();
        DtoHelper.dto2Eo(dto,contractItemDetailEo);
        //合同商品明细表中冗余主表id
        contractItemDetailEo.setUsContractId(contractEo.getId());
        contractItemDetailDas.insert(contractItemDetailEo);
    });
    return contractEo.getId(); }

注意事项

第二条红色标注的新建合同明细实体类代码必须写在里面,每次保存后都新建一个新的合同明细实体,如果写在外面的话就会报错

java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘0‘ for key ‘PRIMARY‘.实体主键id重复了,这时如果你没在方法上加上@Transactional注解,虽然出现报错了,但是数据库还是会执行保存操作,只存入合同明细集合的第一条数据(后面的主键id重复了,不保存),造成数据保存不完整,加了@Transactional后,一但出现错误,就不会执行保存操作(事务的原子性)。

原文地址:https://www.cnblogs.com/liaowenhui/p/11371907.html

时间: 2024-10-24 20:16:45

项目实战[email protected] 的使用的相关文章

IDEA 分享项目到 [email&#160;protected]

前提:新开项目,需要在 [email protected] 建立版本库管理. 1.当然是先在[email protected]上创建仓库,拿到[email protected]仓库的HTTP连接 https://git.oschina.net/*****/***.git 2.如果我们的本地项目是非git项目,那我们要先把它变成git项目 在 idea 中 VCS——Import into Version Control——Create Git Repository——选择你的本地项目 3.通过

IDEA 分享项目到 [email&#160;protected]/GitHub

前提:新开项目,需要在 [email protected] 建立版本库管理. 1.当然是先在[email protected]上创建仓库,拿到[email protected]仓库的HTTP连接 https://git.oschina.net/*****/***.git 2.如果我们的本地项目是非git项目,那我们要先把它变成git项目 在 idea 中 VCS--Import into Version Control--Create Git Repository--选择你的本地项目 3.通过

android studio怎么分享项目到[email&#160;protected]托管

鄙人初次发表,如有不妥之处,敬请批评指正 1,安装git. git下载地址:http://git-scm.com/downloads/ 2,在AS 的File->Settings->Version Control->Git 配置git.exe命令路径,如下图: 配置AS 的git 配置完成后,如果点击"Test" 按钮提示successfully,则说明配置成功. 3.在[email protected]上创建仓库,获取仓库地址. 现在这里我的仓库地址是:https:

如何将本地项目po到[email&#160;protected]中并做质量分析

今天看到oschina的sonar上线,想要试试,发现要把项目放到[email protected]中 手上有个测试的项目,远端在gitlab上,网上搜了下git 配置多个远程仓库: 1.先[email protected]中创建一个项目 2.将本地的ssh公钥放到[email protected]中 3.本地git shell中执行命令,添加远端仓库osc 查看命令远端仓库命令 4.推送项目到[email protected]中 5.开始分析,发现项目要改成公开的才能分析,⊙﹏⊙b汗 我等了半

【轻松一刻】项目代码已上传至开源中国[email&#160;protected]

项目代码已上传至开源中国[email protected],实际上16号左右就改的差不多了,一直耽搁没上传.其中程序中关于趣图的部分我并没有写.其他部分基本完整.主要原因是聚合数据返回的趣图大小不一,且图片尺寸偏小,在1080p和720p的手机上效果都很不好.暂时就不加了.您可以自行找合适的图片接口或者网上爬取合适尺寸的图片,其中图片list的展示与笑话的list展示类似. 后续这个小项目可能也不再更新了. 需要说明的是聚合数据接口的使用是有时间限制的,要想一直使用接口,需要应用上线,并且官网实

将项目同时托管到Github和[email&#160;protected]

http://my.oschina.net/GIIoOS/blog/404555?fromerr=KHvn8UKH 摘要 Github是最大的git代码托管平台,[email protected]是国内最大的git代码托管平台,支持免费私有库,支持SVN操作,用户众多.很多用户需要同时将代码托管到两个平台,这篇文章的主要内容就是介绍如何将代码放到两个平台上并同步代码. [email protected] [email protected]是国内最大的git代码托管平台,支持免费私有库,支持SVN

Androidstudio项目分享到[email&#160;protected]托管

Androidstudio项目分享到[email protected]托管. 一.在OSC创建仓库 例如,创建一个AndroidStudy仓库,创建步骤如下: 输入仓库名称 点击创建按钮,就可以完成仓库的创建,如下图所示: 创建好之后,就可以拿到[email protected]仓库的HTTP连接 https://git.oschina.net/nycly/StudyGit.git 二.将项目托管到Git仓库 2.1.将项目变成一个Git项目 在AndroidStudio中创建一个Android

开源项目中如何同时支持[email&#160;protected]和Github

我的开源项目托管在GitHub,同时在[email protected]也有备份,有两个地方,是不是很麻烦呢?非也非也,下面介绍一下我是怎么做的. 1.先在GitHub新建一个项目,点击GitHub主页右上角的加号 -> New Repository,接着输入Repository name:jsearch,最后点击页面最下面的Create repository按钮,搞定. 2.接着我们在本地检出刚在GitHub新建的项目,我们切换到本地机器的工作目录,然后执行命令: git clone http

把文件(项目)上传到[email&#160;protected]

说明: 登录与配置git的操作此处忽略. 假设你已配置好git,并且已绑定oschina. 下面是把一个本地文件夹上传到git的操作: 在[email protected]上新建项目.记得选择添加对应的 .gitignore 文件 进入本地项目文件夹,打开 git bash 并登录. 在 git bash 中依次输入以下代码----(#注释 忽略 解释说明) 1.git init # 初始化本地目录 2.git pull [email protected]:***.git # [email pr