JPA事务回滚配置
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<!-- <property name="dataSource" ref="dataSource" />-->
</bean>
<!-- 启用支持Annotation注解方式的事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />
1. 由spring框架自动化管理
public class ArticleAction {
@Autowired
private IArticleService articleService;
@Autowired
private IArticleClassService articleClassService;
@RequestMapping({"/jpatest1.htm"})
@Transactional(rollbackFor = Exception.class,propagation=Propagation.REQUIRED)
public ModelAndView jpatest1(HttpServletRequest request){
ModelAndView mv = new JModelAndView("jpatest.html");
ArticleClass articleClass = this.articleClassService.getObjById(CommUtil.null2Long(163843));
articleClass.setClassName("特色服务2222");
this.articleClassService.update(articleClass);
Article article = this.articleService.getObjByProperty("mark", "join111");
article.setTitle(article.getTitle()+"2222");
this.articleService.update(article);
mv.addObject("status","transaction success");
return mv;
}
@RequestMapping({"/jpatest2.htm"})
@Transactional
public ModelAndView jpatest2(HttpServletRequest request){
ModelAndView mv = new JModelAndView("jpatest.html");
ArticleClass articleClass = this.articleClassService.getObjById(CommUtil.null2Long(163843));
articleClass.setClassName("特色服务2222");
this.articleClassService.update(articleClass);
Article article = this.articleService.getObjByProperty("mark", "join111");
article.setTitle(article.getTitle()+"2222");
this.articleService.update(article);
mv.addObject("status","transaction success");
return mv;
}
}
2. 手动提交事务
public class ArticleAction {
@Autowired
private IArticleService articleService;
@Autowired
private IArticleClassService articleClassService;
/**
* JpaTransactionManager事务管理 .
*/
@Resource(name = "transactionManager")
private JpaTransactionManager tm;
@RequestMapping({"/jpatest.htm"})
@Transactional(value="transactionManager", rollbackFor = Exception.class)
public ModelAndView jpatest(HttpServletRequest request){
ModelAndView mv = new JModelAndView("jpatest.html");
//事务开始
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
def.setTimeout(30);
//事务状态
TransactionStatus status = tm.getTransaction(def);
try {
//此处写持久层逻辑
ArticleClass articleClass = this.articleClassService.getObjById(CommUtil.null2Long(163843));
articleClass.setClassName("特色服务2222");
this.articleClassService.update(articleClass);
Article article = this.articleService.getObjByProperty("mark", "join111");
article.setTitle(article.getTitle()+"2222");
this.articleService.update(article);
tm.commit(status);
mv.addObject("status","transaction success");
} catch (Exception e) {
System.out.println("出现异常,开始回滚"+e);
if(!status.isCompleted()){
tm.rollback(status);
}
//throw e;
}
return mv;
}
}
JPA事务回滚配置的更多相关文章
- spring管理事务回滚
spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: ? 1 2 3 4 5 6 7 public method() { ...
- Spring异常抛出触发事务回滚
Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...
- Spring @Transactional ——事务回滚
工作原理运行配置@Transactional注解的测试类的时候,具体会发生如下步骤1)事务开始时,通过AOP机制,生成一个代理connection对象,并将其放入DataSource实例的某个与Dat ...
- 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚
一,为什么框架中根本没有对Exception的一般子类进行回滚配置,异常发生时,事务都进行了回滚 ,说好的只会对RuntimeException(Unchecked 非受检异常)回滚呢? 此时,我们就 ...
- (转)spring异常抛出触发事务回滚策略
背景:在面试时候问到事务方法在调用过程中出现异常,是否会传递的问题,平时接触的比较少,有些懵逼. spring异常抛出触发事务回滚策略 Spring.EJB的声明式事务默认情况下都是在抛出unchec ...
- Spring事务回滚和异常类
1.异常的一些基本知识 异常的架构 异常的继承结构:Throwable为基类,Error和Exception继承Throwable.Error和RuntimeException及其子类成为未检查异常( ...
- 浅谈Spring中的事务回滚
使用Spring管理事务过程中,碰到过一些坑,因此也稍微总结一下,方便后续查阅. 1.代码中事务控制的3种方式 编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚.优点就是可以灵活控 ...
- springmvc 事务回滚说明
Spring中的@Transactional(rollbackFor = Exception.class)属性详解 序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollb ...
- ssh事务回滚,纪念这几个月困扰已久的心酸
以前的事务采用的是JTA,xml注入的方式.本人就着开发要优雅合理利用轮子的态度,一直不满意JTA式的申明和切入方式. spring的注解方式多优雅,可是万恶的直到项目快要上线时终于找到了注解式不能回 ...
随机推荐
- github 分支 合并
Git如何进行分支管理? 1.创建分支 创建分支很简单:git branch <分支名> 2.切换分支 git checkout <分支名&g ...
- 使用Slip.js快速创建整屏滑动的手机网页
原文 http://segmentfault.com/blog/laopopo/1190000000708417 现在滑屏网页越来越多,比如我在搜狐视频就做了好几个,举个例子,可以用手机扫描以下的二 ...
- MBR
Mbr位于磁盘的0柱面,0磁头,1扇区. MBR 有三部分构成,主引导程序,硬盘分区表DPT和,硬盘的有效标志55AA.在512个字节的主引导扇区里. 主引导程序占446个字节,dpt占6 ...
- Android SlidingMenu开源库及其使用
极客学院教程: http://www.jikexueyuan.com/course/61_5.html?ss=1 1. SlidingMenu开源库的配置 2. SlidingMenu 的使用 --- ...
- python自动开发之(ajax)第二十天
1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...
- oracle常见为题汇总,以及一个简单数据连接操作工厂
本人软件环境:win8.1 64位操作系统,vs2013,安装好了与oracle数据库对应的客户端 连接oracle数据库.以及操作数据库 1.使用IIS建立网站,浏览网页时候,提示“ ...
- 项目知识点.Part3
内存管理: 基本数据类型或者Core Foundation对象都没有引用计数 主线程会自动创建释放池,子线程需要手动创建释放池. 具体的区别:http://www.cnblogs.com/langti ...
- 重装Ubuntu系统并配置开发环境
安装 Ubuntu 并配置开发环境 写一篇文章详细记录下来所有的过程,以便以后参考. 安装前的准备 备份所有代码和配置文件 备份下载的各类文件 Ubuntu 安装 下载安装 Ubuntu14.04,下 ...
- laravel框架——线上环境错误总结
除了根目录,其他目录访问全是Not Found
- fix iis Running slow
为什么写这个文章.因为我现在再找一个站点的访问原因..方法还是老方法.. 1. 站点是否真的挂了 a. 基本上全挂.所有请求非常缓慢或超时. b.大多数请求慢,但最终还是执行了.有可能 队列再排队 怎 ...