spring管理下的声明式事务与存储过程之间的记录
来源:互联网 发布:js触发select选择事件 编辑:程序博客网 时间:2024/06/05 23:59
1.spring声明式事务并不能管理存储过程的事务,存储过程需要另外添加事务:
例如:存储过程捕获异常然后回滚:
create procedure inserttrabzsu()begindeclare errno int default 0;declare i int;declare continue handler for sqlexception SET errno=1;start transaction;set i=0;while i<10 doinsert into news (click,content) values(45,"sdsgdsf");set i=i+1;end while;IF errno = 1 THEN ROLLBACK; ELSE COMMIT; END IF; select errno;end;
我的想法是外部写着普通的sql语句,然后混合了存储过程,存储过程中如果有错,则回滚,且返回给外部一个值,根据这个值来决定是否主动抛出异常,让外部的sql语句也能回滚。但是最终的结果会有个bug:
存储过程中的语句出现错误,会回滚,然后返回给外部一个值,根据此值,让外部主动进入异常throw new Exception("MyException");按道理来讲,外部也将回滚,但是发现回滚了多条,始终第一条无法回滚。因此:一般情况下还是不要混合使用,要么直接使用多条sql语句和程序完成任务,要么就写一个存储过程。
附上测试代码:
public boolean insertnewtratwo() throws Exception{News news=new News();for(int i=0;i<15;i++){news.setClick(20);news.setContent("sqlcharu");this.em.persist(news);}String a=this.em.createNativeQuery("{call inserttrabzsu()}").getSingleResult().toString();if(a.equals("1")){ throw new Exception("MyException"); }System.out.println(a);int aa=5/0;return true;}
0 0
- spring管理下的声明式事务与存储过程之间的记录
- 在spring声明式事务下的Hibernate的session管理。
- Spring的编程式事务与声明式事务
- Spring的编程式事务与声明式事务区别
- 框架采用的是spring管理声明式事务
- Spring的声明式事务
- spring的声明式事务
- spring的声明式事务
- Spring的声明式事务
- Spring的声明式事务
- spring的声明式事务
- 85-002-3 spring与hibernate的整合(采用AOP来管理事务实现声明式事务)
- Spring 声明式事务的隔离级别与传播机制
- spring管理的事务中的日志记录
- Spring笔记(四): spring的编程式事务与声明式事务
- Spring的声明式事务简介
- Spring 声明式事务的传播性
- 对Spring声明式事务的理解
- 【IOS】This certificate has an invalid issuer问题
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——U-Boot移植
- AccessibilityService 服务配置文件的内容详解
- jquery动态添加元素后, 该元素事件失效,可尝试原生 js写法解决
- 多数据源配对
- spring管理下的声明式事务与存储过程之间的记录
- 接口安全
- java常用代码
- java实现标准化考试系统详解(三)-----考试界面模块化实现及事件处理
- MySQL数据库的乱码问题
- innodb事务日志详解
- Redis从基础命令到实战之集合类型(Set)
- 事务产生的脏读幻读不可重复读
- ubuntu 16.04下安装chrome