zoukankan      html  css  js  c++  java
  • SpringMVC+hibernate4事务处理

    首先spring-hibernate.xml里配置事务:

    <!-- 配置事务管理器 -->
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    
        <!-- 配置事务增强处理Bean,指定事务管理器 -->
        <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
            <!-- 配置详细事务处理语义 -->
            <tx:attributes>
                <tx:method name="insert*" propagation="REQUIRED" />
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
    
                <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
                <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
                <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
                <tx:method name="load*" propagation="SUPPORTS" read-only="true" />
    
                <!-- 其他采用默认事务方式 -->
                <tx:method name="*" />
    
            </tx:attributes>
        </tx:advice>

    然后,使用的时候要注意,要用注解的方式在Service层配置事务:

    @Override
        @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
        public String Save(String template_code, String block_code, String prop_code, String rule_code, String tpl,
                String par_prop, String title) {
            // TODO Auto-generated method stu
            return teValidationRuleDao.Save(template_code, block_code, prop_code, rule_code, tpl, par_prop, title);
        }

    最后,要注意如果需要事务回滚,一定要在Dao层抛出RuntimeException这个运行时错误,否则不好使!

    @Override
        public String Save(String template_code, String block_code, String prop_code, String rule_code, String tpl,
                String par_prop, String title) {
            // TODO Auto-generated method stub
            String json = "{status: 'OK', msg: '保存成功!'}";
            Session session = this.getCurrentSession();
            try {
                TeValidationRule vModel = new TeValidationRule();
                List<Map> tpls = session.createSQLQuery("select * from te_template_sql t where t.sql_id = '"+tpl+"'")
                        .setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP).list();
                String muban = tpls.get(0).get("SQL_TEMPLATE").toString();
                String mainSql = "select b.table_name,p.data_field,p.prop_name from te_template a "
                        + "left join te_template_block b on b.template_code = a.template_code "
                        + "left join te_template_property p on p.block_code = b.block_code "
                        + "where a.template_code = '"+template_code+"' and b.block_code = '"+block_code+"' and p.prop_code = '"+prop_code+"'";
                List<Map> mainProp = session.createSQLQuery(mainSql).setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP).list();
                String table = mainProp.get(0).get("TABLE_NAME").toString();
                String datafield = mainProp.get(0).get("DATA_FIELD").toString();
                String pname = mainProp.get(0).get("PROP_NAME").toString();
                
                muban = muban.replaceAll("tableName", table);
                muban = muban.replaceAll("dataField", datafield);
                muban = muban.replaceAll("parField", par_prop);
                
                String rid = "";
                if(rule_code!=null && !rule_code.equals("")){
                    rid = rule_code;
                    vModel.setRuleCode(rule_code);
                }else{
                    rid = UUID.randomUUID().toString();
                }
                vModel.setRuleName(title);
                vModel.setRuleType(2);
                vModel.setRuleContent(muban);
                vModel.setErrorMsg(pname+"格式错误!");
                vModel.setRuleCategoryCode("8e267df45a7a4f59b257f5c15cc09bbb");
                vModel.setRuleStatus(1);
                vModel.setCreateUser("admin");
                vModel.setCreateTime(new Date());
                vModel.setUpdateUser("admin");
                vModel.setUpdateTime(new Date());
                
                if(rule_code!=null && !rule_code.equals("")){
                    session.update(vModel);
                }else{
                    session.save(vModel);
                }
                
                String numSql = "select count(*) nums from te_template_validation_rule "
                        + "where block_code = '"+block_code+"' and prop_code = '"+prop_code+"' and rule_code = '"+rule_code+"'";
                List nums = session.createSQLQuery(numSql)
                        .addScalar("NUMS").list();
                int has = Integer.parseInt(nums.get(0).toString());
                TeTemplateValidationRule teTemplateValidationRule = new TeTemplateValidationRule();
                String tbp = "";
    
                teTemplateValidationRule.setBlockCode(block_code);
                teTemplateValidationRule.setPropCode(prop_code);
                teTemplateValidationRule.setRuleCode(rid);
                teTemplateValidationRule.setRuleType(2);
                teTemplateValidationRule.setRuleContent(muban);
                teTemplateValidationRule.setErrorMsg(pname+"格式错误!");
                teTemplateValidationRule.setCreateUser("admin");
                teTemplateValidationRule.setCreateTime(new Date());
                teTemplateValidationRule.setUpdateUser("admin");
                teTemplateValidationRule.setUpdateTime(new Date());
                
                if(has == 0){
                    tbp = UUID.randomUUID().toString();
                    teTemplateValidationRule.setTemplateRuleCode(tbp);
                    session.save(teTemplateValidationRule);
                }else{
                    String hasTbpSql = "select template_rule_code from te_template_validation_rule where block_code = '"+block_code+"' and prop_code = '"+prop_code+"' and rule_code = '"+rule_code+"'";
                    List tbp_code = session.createSQLQuery(hasTbpSql).addScalar("TEMPLATE_RULE_CODE").list();
                    tbp = tbp_code.get(0).toString();
                    teTemplateValidationRule.setTemplateRuleCode(tbp);
                    session.update(teTemplateValidationRule);
                }
                
            } catch (Exception e) {
                // TODO: handle exception
                json = "{status: 'ERROR', msg: '保存失败!'}";
                throw new RuntimeException();
            }
            return json;
        }
  • 相关阅读:
    Pycharm 设置python文件自动生成头部信息模板
    Python3.0 调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出
    Python3.0 操作MySQL数据库执行SQL语句
    js时间戳转为日期格式
    Vue脚手架(vue-cli)安装总结
    Vue的生命周期
    常用的ES6语法
    学习python登录demo
    CSS的垂直居中和水平居中总结
    CSS清除浮动方法总结
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/8205644.html
Copyright © 2011-2022 走看看