首先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. ESXi上的固态硬盘识别为非SSD

    启动ESXi的SSH服务 通过SSH远程连接ESXi主机 输入如下命令 # esxcli storage nmp device list        #列出储存清单(SSD设备的“device na ...

  2. 从头到尾测地理解KMP算法【转】

    本文转载自:http://blog.csdn.net/v_july_v/article/details/7041827 1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP ...

  3. Axios 使用采坑经验

    报错信息:Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL 解 ...

  4. TCGA系列--TCGA可视化数据库GEPIA

    中国大牛力作  张泽民: http://gepia.cancer-pku.cn/index.html http://cancer-pku.cn/

  5. 快递100API接口调用代码示例

    package com.util; import java.io.IOException; import java.io.InputStream; import java.net.MalformedU ...

  6. Java网络编程和NIO详解3:IO模型与Java网络编程模型

    Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...

  7. 一张思维导图教你使用google一下

    导图总览 google搜索技巧.png 双引号 代表完全匹配搜索 也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配 例如搜索"java 排序"与无引号的j ...

  8. UVA-12657 Boxes in a Line (双向链表)

    题目大意:一个1~n的升序数字序列,有4种操作.操作1,将x放到y前面一个位置:操作2将x放到y后面的一个位置:操作3交换x和y的位置:操作4反转整个序列.求经过m次操作后的所有奇数项的和. 题目分析 ...

  9. MAPE 平均绝对百分误差

    from fbprophet.diagnostics import performance_metrics df_p = performance_metrics(df_cv) df_p.head() ...

  10. 在laravel视图中直接使用{{ csrf_token() }}被翻译成英文显示的处理方法

    在表单中加一个input框在放入{{ csrf_token() }}就可以了: 方法如下: <input type="hidden" name="_token&qu ...