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的注解方式多优雅,可是万恶的直到项目快要上线时终于找到了注解式不能回 ...
随机推荐
- ueditor的过滤、转义、格式丢失问题
1. 过滤 http://www.cnblogs.com/Olive116/p/3464495.html 2. 转义 http://segmentfault.com/q/101000000048928 ...
- PHP数据学习-二维数组【3】
<?php // $project = array( // array("bai",12,23.0), // array("zeng",34,12.0), ...
- Python核心编程2第一章课后练习
1-1 在windows下的安装方法在网上下载python2.7直接安装到C盘1)在系统变量中找到path. 2)编辑path值,添加你安装的python路径,C:\Python27. 3)检验pyt ...
- Gridview BottomPagerRow添加自定义控件
pager.ascx public partial class pager : System.Web.UI.UserControl{ } .aspx protected pager ctl; prot ...
- BZOJ 1023 仙人掌图
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回 ...
- mouseenter 和 mouseleave
做一个下拉菜单的时候,HTML结构如下: <ul> <li class="red"> <a href="">第一级</ ...
- Linux Shell编程(6)——变量替换
变量的名字是它的值保存的地方.引用它的值称为变量替换.$让我们仔细地区别变量和变量的值.如果variable1是一个变量的名字,那么$variable1就是引用这个变量的值――即这个变量它包含的数据. ...
- 【模拟】Codeforces 710B Optimal Point on a Line
题目链接: http://codeforces.com/problemset/problem/710/B 题目大意: 给N个点的坐标,在X轴上找到最靠左的点使得这个点到N个点距离之和最小. 题目思路: ...
- 用DELPHI操作EXCEL Word
用DELPHI操作EXCEL 在DELPHI中显示EXCEL文件,可用以下简单代码做到.但要实用,则需进一步完善. var Form1: TForm1; EApp:variant;implemen ...
- Android吧数据保存成xml文件
public class MainActivity extends Activity { private List<Person> persons; @Override protected ...