我在Service层里面调用两个Dao层的方法。一个方法用于储存一行Investor数据,一个方法用于储存和有Investor主键的Address数据。service层方法如下,注意Investor继承Person,放在同一个数据库表里面。

@Service

public class ServiceImpl implements PortfolioService {

@Autowired

private PersonDao personDao;//Dao层接口

@Transactional(rollbackFor = { Throwable.class })

public void addInvestor(String personCode, String firstName, String lastName, String country, String state,

String street) {

Investor p = new Investor(personCode,firstName,lastName);

int personId = personDao.addPerson(p);//第一个方法添加investor,方法返回该行数据自动生成的主键

Address ad = new Address(street,state, country);

personDao.addAddress(ad,personId);//第二个方法添加address,前面生成的personId会成为Address属性,因为Address对应一个investor

}

}

我必须保证这两个方法的原子性,如果addAddress出现了问题,addPerson必须回滚。但是我的方法始终没有达到回滚的效果。我成功地插入一行person数据,addAddress方法出错,addPerson方法却没有回滚。

以下是相关的xml配置文件和代码

Spring-Hibernate.xml

xmlns:context="http://www.springframework.org/schema/context"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

pojo

pojoView

${jdbc.mysql.dialect}

${jdbc.hibernate.hbm2ddl.auto}

true

true

classpath*:hibernate.cfg.xml

class="org.springframework.orm.hibernate5.HibernateTransactionManager">

下面是我在UnitTest方法里面调用Service层的方法。

PersonTest.java

public class PersonTest extends BaseTest {

@Autowired

private PortfolioService ps;

public PersonTest() {

System.out.println("PersonTest构造方法");

}

@Test

public void test8() {

ps.addInvestor("kk5", "m4", "chrow", "Cua", "Nebska", "D stret");

}

BaseTest.java

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath*:Spring-Hibernate.xml")

public class BaseTest {

@Before

public void init() {

System.out.println("initializing");

}

}

PersonDaoImpl.java

@Repository

public class PersonDaoImpl implements PersonDao {

@Autowired

private SessionFactory sessionFactory;

public void addAddress(Address ad,int personId) {

Session session = sessionFactory.openSession();

//ad.setPersonId(personId);

session.save(ad);

session.close();

}

public int addPerson(Person p) {

Session session = sessionFactory.openSession();

session.save(p);

int personId = p.getPersonId();

session.close();

return personId;

}

}

请大神指点一下这个为什么不能回滚,测试方法test8()没有报错,只是Investor的数据被存入了数据库,没有因为addAddress的异常而回滚。

spring mysql 事务回滚失败_Spring事务回滚失败相关推荐

  1. java事务传播机制事例_Spring事务传播机制

    addBook()代码 Java代码  收藏代码 public void addBook() throws Exception{ this.jdbcTemplate.execute(ADD_BOOK) ...

  2. java 回滚异常_Spring事务管理只对出现运行期异常进行回滚

    Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚. 如果一个方法抛出Exception或者Checked异常,Spring事务管理默 ...

  3. Spring事务方法与非事务方法执行相互调用不回滚,你踩过这个坑没?

     作者:西风一任秋 blog.csdn.net/m0_38027656/article/details/84190949 写这篇文章的初衷呢就是最近遇到了一个spring事务的大坑.与其说是坑,还不如 ...

  4. Spring 事务 状态信息的创建、回滚、清理、提交

    为什么80%的码农都做不了架构师?>>>    Spring 的事务是依据AOP来实现的,通过AOP从切面来抓捕异常判断是否回滚以及如何回滚,若是正常的返回则是清理事务信息,实施事务 ...

  5. mysql 事务 回滚 原理_mysql 事务的实现原理

    一. 开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究 ...

  6. 问题(待完成):微服务,失败回滚?保持事务的原子性?多步骤调用,如何来实现...

    问题(待完成):微服务,失败回滚?保持事务的原子性?多步骤调用,如何来实现 转载于:https://www.cnblogs.com/panpanwelcome/p/9104746.html

  7. mysql的回滚机制_mysql事务回滚机制概述

    应用场景: 银行取钱,从ATM机取钱,分为以下几个步骤 1 登陆ATM机,输入密码: 2 连接数据库,验证密码: 3 验证成功,获得用户信息,比如存款余额等: 4 用户输入需要取款的金额,按下确认键: ...

  8. Spring事务总结(一) 内部调用事务失效、异常回滚

    Spring事务总结(一) 内部调用事务失效.异常回滚 参考文章: (1)Spring事务总结(一) 内部调用事务失效.异常回滚 (2)https://www.cnblogs.com/gss128/p ...

  9. Spring事务抛出Exception异常不回滚

    今天有个业务逻辑流程为: 1.访客预约确认先更新预约状态为"预约确认" 2.调用http接口发短信.更新预约状态为"预约成功"等一系列操作 这里面有个问题,如果 ...

最新文章

  1. 女性程序员大会ghc_在女性科技大会上成为男人的感觉
  2. 使用python收取IMAP邮件即fox邮件且设置为已读
  3. 01-Windows下安装Node.js及环境配置
  4. 20191004:包装类Integer,int,String类的相互转换
  5. php微信公众平台开发获取access_token,用CURL出现certificate verify failed错误的解决方法...
  6. 分布式存储引擎OceanBase,UpdateServer 实现机制——存储引擎
  7. SQL:postgresql中COALESCE函数
  8. 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比
  9. 在线答题助手c语言源码,开源的在线答题小程序
  10. 华为手机一键解锁工具箱下载 | 华为手机解BL锁软件: 支持解锁bootloader,刷写recovery功能
  11. 原生/RN/Flutter选型
  12. Python wmi Cookbook 中文翻译
  13. win 7 必备 2
  14. java鬼吹灯搬山法杖_鬼吹灯昆仑神宫技能搭配攻略之搬山职业篇
  15. splitstring函数在C语言中的,C语言 字符串Split功能实现
  16. ActiveSync与设备连接
  17. bat命令映射网络驱动器
  18. 数控软件怎么做自动化测试,数控机床仿真软件
  19. 日媒:唏嘘 美国雅虎自毁前程的3个误判
  20. 金融理财终端、股票软件数据剖析: 20、qt for android(c/c++)

热门文章

  1. java lzw_lzw在java中解压缩
  2. python again_It’s really(wonder)________ to see you here again in Beijing.
  3. 【观察】戴尔科技:未来企业的创新平台,数字中国的坚实底座
  4. 巧萌易携之ROS2Go的不完全教研攻略
  5. java余弦距离_使用TensorFlow实现余弦距离/欧氏距离(Euclideandistance)以及Attention矩阵的计算...
  6. 网络正常,浏览器显示代理服务器没有响应怎么办?
  7. jpress连接数据库mysql_win10+java+mysql+tomcat+jpress环境搭建与部署
  8. 〖Python自动化办公篇⑤〗- 文件自动化管理 - 清理重复的文件与批量修改文件名
  9. Python之读取MongoDB导出的BSON文件
  10. linux 下MySQL本地安装mysql - u root - p 无法登入