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的编译插件中声明正确的字符集编码编码——编译使用的字符集编码与代码文件使用的字符集编码一致!! 安装系统之后,一般中文系统 ...
随机推荐
- ZooKeeper增加Observer部署模式提高性能(转)
除了Leader和Follow模式之外,还有第三种模式:Observer模式. Observer:在不伤害写性能的情况下扩展ZooKeeper. 虽然通过Client直接连接到ZooKeeper集群的 ...
- [微信开发] - 使用weixin4j进行二次开发
1. 服务器连接配置OK, 配置文件在classpath:weixin4j.properties中 # weixin4j-spring-demo### 使用weixin4j(岸思版)springboo ...
- ActiveMQ(1) -- 入门案例
- MongoDB中的数据聚合工具Aggregate和Group
周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...
- 【Demo】CSS3 动画文字
效果图: 完整代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- 51nod-1455-dp/缩小范围
1455 宝石猎人 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 苏塞克岛是一个有着30001个小岛的群岛,这 ...
- vue 点击按钮 input框架获取焦点的方法
在按钮事件里加上这一段this.$nextTick(() =>{ this.$refs.input.focus()})
- Leetcode 62
//从理解二维dp到简化成一维dp我用了一年的时间class Solution { public: int uniquePaths(int m, int n) { vector<); ;i &l ...
- 在将对象数组转换为json字符串
private List<WHCombineBatchFragmentBarcodeEnterEvent.Message.Data> dataList = new ArrayList< ...
- centos6 Nginx+Tomcat负载均衡配置
一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...