简单单解决你的事务回滚问题

转载 2017年08月18日 10:54:19
/**
     * 用户登录接口
     * 
     * 
     * 1明确事务方法前的命名规则
     * 2保证事务方法执行的时间尽可能的短,不允许出现循环操作,不允许出现RPC等网络请求操作
     * 3不允许所有的方法都使用事务,节省服务器性能和缩短数据库连接时间
     * 4如果出现有多个地方需要事务回滚时,使用自定义或原有的异常进行抛出,异常必须继承RunTimeError,否则不会触发回滚操作
     * 5使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚
     * 
     */
    @Transactional
    public UserModel login(UserModel user){
        
        UserModel userEntity = new UserModel();
        
        
        userEntity = userDao.login(user);
        if(userEntity == null)
        {
            return null;
        }
        
        userEntity = userDao.login(user);
        if(userEntity == null)
        {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return null;
        }
        else
        {
            return userEntity;
        }
    }




直接给出一个例子代码,上面只是记录一下,下面才是干货。

首先很多时候我们不会采用事务操作,但是当我们在一个服务层多次访问数据库特别是进行插入删除操作的时候,我们需要使用事务进行操作,也就是一个不成功,所有的操作全部回滚。

那么具体的事务特性我就不多说了,规范我也打在最上面的注释里面了。主要注意一下,

使用@Transactional 注解

如果第一次插入成功,第二次插入失败,执行TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 这条语句之后,第一次的插入动作就被回滚了,也就是并没有生效。

手动回滚看起来会比较实用一些。

然后对于抛出异常的那种自动回滚可以参考百度各种代码。比较麻烦一些,就不列举了。

 

补充一下:

使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();  设置回滚点,使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);回滚到savePoint。
 
 
后序补充详细属性配置(复杂)

相关文章推荐

spring+ mybatis 事务不能回滚问题解决

最近遇到一个回滚问题,百度了一天了,终于解决了; 百度上遇到很多中情况,我记录的情况主要是一下几点,但都解决不了,可能是错误类型不同,我的解决方式如下 我的事务管理用的是aop我贴出代码: tx:a...

mybatis整合spring、springmvc时业务层无法进行事务回滚问题解决

前言:近期换了新公司,刚来公司就接触了一下mybatis,因为springmvc和spring比较熟悉,我想大概现在绝大部分的公司都在用吧,刚接触mybatis时感觉真心蛋疼,纯sql才处理业务,实在...

Hibernate(1)Hibernate简介和简单示例,了解Hibernate事务回滚用法

1 Hibernate简介 Hibernate是一个orm(object relation mapping 对象关系映射)框架,处于项目的持久层,也叫持久层框架(持久层框架还有ojb等)。 Hiber...

VUE起步构建简单单页应用

环境搭建工作: 1.先安装node,git工具(便于命令行操作) 2.换源(npm淘宝镜像网站:https://npm.taobao.org/)   命令:npm install -g cnpm --...

spring 声明式事务管理在真实的Service和单元测试时的回滚情况,需要注意的问题,jpa为例子

如何测试事务,测试事务回滚情况: 我做了大量的不同的测试: 场景1:    Service层中使用注解@Transactional,注解@PersistenceContext     ...

SSH整合,spring事务管理不回滚问题

Spring的事务回滚,当且仅当捕获到RuntimeException类型异常时,才会回滚,对普通Exception异常无效。 以下是我Service层捕获异常,并抛出RuntimeExce...

Spring配置事务 service 异常捕获回滚问题

1.首先来看一Spring配置事务的传播种类: Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行...

关于spring手动进行事务提交以及回滚的问题。

首先,就我的理解。 事务的过程如下:开始事务--------提交/回滚事务。 事务就是一系列执行的过程。开始之后,就会执行过程,并且记住过程。这个时候,数据库中所用的表是被锁定了的。 所以说,如果你只...

关于JaveEE中三大框架事务回滚异常捕获的问题

HibernateTemplate类方法save等方法的异常抓取、关于JaveEE中三大框架SSH事务回滚异常捕获...

SpringMVC Mybatis的事务回滚问题

采用的基本搭建环境:SpringMVC、MyBatis、MySQL、tomcat         Spring事务管理分解了传统的全局事务管理和本地事务管理的劣势,使得在任何环境中都可以使用统一的事...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单单解决你的事务回滚问题
举报原因:
原因补充:

(最多只允许输入30个字)