首先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;
}

SpringMVC+hibernate4事务处理的更多相关文章

  1. springmvc+hibernate4事务管理配置

    1.事务的特性 事务的四种特性: 原子性:体现一个事务的操作的不可分割,要么权执行,要么全不执行. 一致性:事务的执行结果必须从一种一致性状态变到另一种一致性状态.最典型的就是转账,两个账户A.B总金 ...

  2. Spring4+SpringMVC+Hibernate4整合入门与实例

    配置web.xml <? xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&q ...

  3. Spring4 SpringMVC Hibernate4 Freemaker 集成示例

    变更更正(2014-05-30 13:47:22):一些IDE在web.xml我们会报告这个错误: cvc-complex-type.2.4.a: Invalid content was found ...

  4. springMVC+Hibernate4+Spring整合一(配置文件部分)

    本实例采用springMvc hibernate 与 spring 进行整合, 用springmvc 取代了原先ssh(struts,spring,hibernate)中的struts来扮演view层 ...

  5. Spring4 SpringMVC Hibernate4 Freemaker 整合样例

    更正改动(2014-05-30 13:47:22):有的IDE中web.xml会报这个错: cvc-complex-type.2.4.a: Invalid content was found star ...

  6. 搭建SpringMVC+Hibernate4+Spring3+Ajax+Maven项目

    首先新建一个Maven项目.百度一下会有非常多实例,这里就不介绍了,直接奔主题. 如题:这里使用的是Hibernate4和Spring3,使用的JPA和Spring注解,然后JDK版本号是1.7 以下 ...

  7. springMVC+Hibernate4+spring整合实例二(实例代码部分)

    UserController.java 代码: package com.edw.controller; import java.io.IOException; import java.io.Print ...

  8. Maven下Spring + SpringMvc + Hibernate4 配置实例

    1. 开发环境 IDEA 2. 在pom.xml中配置引用相关的包. <properties> <junit.version>4.10</junit.version> ...

  9. maven学习日记(三)-------开发环境搭建(springmvc+hibernate4)各种maven错误汇总

    1.maven编码 gbk 的不可映射字符 解决这个问题的思路: 在maven的编译插件中声明正确的字符集编码编码——编译使用的字符集编码与代码文件使用的字符集编码一致!! 安装系统之后,一般中文系统 ...

随机推荐

  1. The current .NET SDK does not support targeting .NET Core 3.0

    编译错误 Severity Code Description Project File Line Suppression StateError NETSDK1045 The current .NET ...

  2. Codeforces Round #394 (Div. 2) C.Dasha and Password(暴力)

    http://codeforces.com/contest/761/problem/C 题意:给出n个串,每个串的初始光标都位于0(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...

  3. Yii关键概念

    basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含应用配置及其它配置 console.php 控制台应用配置信息 web.php We ...

  4. 类的成员变量修饰 const 和static

    类型 初始化方式 类内(声明) 类外(类实现文件) 构造函数中 构造函数的初始化列表 非静态非常量数据成员 N N Y Y 非静态常量数据成员 N N N Y (must) 静态非常量数据成员 N Y ...

  5. rails5.2新特性--ActiveStorage, 使用80percent/rails-template

    看guide,看ruby-China的好贴,看最新版的书上案例. 以下摘自https://ruby-china.org/topics/36666 作者lyfi2003 用户对上传文件的要求体验: 上传 ...

  6. bzoj2049: [Sdoi2008]Cave 洞穴勘测 lct裸题

    题意:三种操作一种摧毁一条边,一种链接一条边,一种查询两个点是否联通 题解:lct的link和cut即可 /********************************************** ...

  7. uva11149矩阵快速幂

    求A+A^1+...+A^n 转换一下变成|A  E|,的n+1次方就是|A^(n+1)  A^n+...+A+E| |0  E|                       |    0       ...

  8. 【MySQL】经典数据库SQL语句编写练习题——SQL语句扫盲

    [MySQL]数据库原理复习——SQL语言 对基本的SQL语句编写的练习题,其中的题目的答案可能会有多种书写方式. 1.题目1 1.1 关系模式 学生student:SNO:学号,SNAME:姓名,A ...

  9. 牛客网——F求最大值

    链接:https://www.nowcoder.net/acm/contest/29/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  10. 黑暗世界的搜索引擎 https://fofa.so/ https://www.shodan.io https://www.zoomeye.org 查找设备漏洞

    from:http://www.freebuf.com/sectool/121339.html 什么是 Shodan? 首先,Shodan 是一个搜索引擎,但它与 Google 这种搜索网址的搜索引擎 ...