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;
}
SpringMVC+hibernate4事务处理的更多相关文章
- springmvc+hibernate4事务管理配置
1.事务的特性 事务的四种特性: 原子性:体现一个事务的操作的不可分割,要么权执行,要么全不执行. 一致性:事务的执行结果必须从一种一致性状态变到另一种一致性状态.最典型的就是转账,两个账户A.B总金 ...
- Spring4+SpringMVC+Hibernate4整合入门与实例
配置web.xml <? xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&q ...
- Spring4 SpringMVC Hibernate4 Freemaker 集成示例
变更更正(2014-05-30 13:47:22):一些IDE在web.xml我们会报告这个错误: cvc-complex-type.2.4.a: Invalid content was found ...
- springMVC+Hibernate4+Spring整合一(配置文件部分)
本实例采用springMvc hibernate 与 spring 进行整合, 用springmvc 取代了原先ssh(struts,spring,hibernate)中的struts来扮演view层 ...
- Spring4 SpringMVC Hibernate4 Freemaker 整合样例
更正改动(2014-05-30 13:47:22):有的IDE中web.xml会报这个错: cvc-complex-type.2.4.a: Invalid content was found star ...
- 搭建SpringMVC+Hibernate4+Spring3+Ajax+Maven项目
首先新建一个Maven项目.百度一下会有非常多实例,这里就不介绍了,直接奔主题. 如题:这里使用的是Hibernate4和Spring3,使用的JPA和Spring注解,然后JDK版本号是1.7 以下 ...
- springMVC+Hibernate4+spring整合实例二(实例代码部分)
UserController.java 代码: package com.edw.controller; import java.io.IOException; import java.io.Print ...
- Maven下Spring + SpringMvc + Hibernate4 配置实例
1. 开发环境 IDEA 2. 在pom.xml中配置引用相关的包. <properties> <junit.version>4.10</junit.version> ...
- maven学习日记(三)-------开发环境搭建(springmvc+hibernate4)各种maven错误汇总
1.maven编码 gbk 的不可映射字符 解决这个问题的思路: 在maven的编译插件中声明正确的字符集编码编码——编译使用的字符集编码与代码文件使用的字符集编码一致!! 安装系统之后,一般中文系统 ...
随机推荐
- CF_400_D
codeforces_400_D 题目大意:给出n扇门,m把钥匙,和没把钥匙可以改变状态(关->开,开->关>)的门的数量及对应编号(保证每个门被两把钥匙控制),现给出n扇门的初始状 ...
- Anaconda中常用的用法
Anaconda中常用的用法 conda 是开源包(packages)和虚拟环境(environment)的管理系统. packages 管理: 可以使用 conda 来安装.更新 .卸载工具包 ,并 ...
- TCGA系列--TCGA可视化数据库GEPIA
中国大牛力作 张泽民: http://gepia.cancer-pku.cn/index.html http://cancer-pku.cn/
- BZOJ 2226 【SPOJ 5971】 LCMSum
题目链接:LCMSum 这个题显然就是要我们推式子了……那么就来推一波: \begin{aligned}&\sum_{i=1}^n lcm(i,n) \\=&\sum_{i=1}^n\ ...
- pku 2284 That Nice Euler Circuit
题意: 给你n个点第n个点保证与第0个点相交,然后求这n个点组成的图形可以把整个平面分成几个面 思路: 这里的解题关键是知道关于多面体的欧拉定理 多面体: 设v为顶点数,e为棱数,f是面数,则v-e+ ...
- python 删除字典元素
myDict = {,,,} print(myDict) if 'a' in myDict: del myDict['a'] print(myDict)
- 使用git bush 生成github SSH公钥
1 如果没有安装ssh,那么使用下面的指令 sudo apt-get install ssh 2 检查SSH公钥 cd ~/.ssh 看看存不存在.ssh,如果存在的话,掠过下一步:不存在的请看下一步 ...
- CSS之旋转立方体
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- angular 自定义指令参数详解
restrict:指令在dom中的声明形式 E(元素)A(属性)C(类名)M(注释) priority优先级:一个元素上存在两个指令,来决定那个指令被优先执行 terminal:true或false, ...
- 在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮。
package april; import java.util.ArrayList; import java.util.Scanner; /** * * @ClassName: Class_9 * @ ...