zoukankan      html  css  js  c++  java
  • 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;
        }
        
    }    
        
  • 相关阅读:
    springboot(eureka子项目)+idea+jsp 404问题
    什么是区块链以及他的6个特征?
    elasticsearch启动时提示内存不足错误的解决方法
    ElasticSearch 安装root用户启动失败问题解决
    防抖节流(立即执行和延时执行)
    将数字转为千分制格式(最简单)
    微信H5跳转任意小程序
    原生html+css设置项目主题色(超简单)
    H5获取手机型号
    css属性——env()和constant()设置安全区域
  • 原文地址:https://www.cnblogs.com/beyang/p/6069746.html
Copyright © 2011-2022 走看看