Hibernate和jdbc事务原理

菜鸟就是菜鸟,不遇到问题还发现不了自己错在哪了...........

昨天遇到问题,(使用的springMVC和Hibernate,事务是配置的数据源 匹配方法名来加事务的),在几个service的方法之间嵌套使用时,发现修改数据数据库没变,我以为是几个service相互嵌套 事务加在了最外层 内层的不用加了就,只需要内层的向上抛出异常便可。到最后发现内层的方法中修改新增的地方修改不了。
仔细查找发现内层的service方法名 不是按照匹配的格式写的(save/del....)之类的,然后我手动加上@Transactional 事务标签,竟然好了.....

之前一直以为 加事务是为了出错时候事务回滚,没发现hibernate的事务不仅仅是回滚,还要事务的提交 !!并且在项目中一般是只有一层事务的,就是指的你程序的那一层控制。仔细搜了下原来如此:

在Hibernate中, Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写 commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写Transaction的话,数据库根本就没有反应。

conn.setAutoCommit(false) 这个方法中的参数如下:

true:sql命令的提交(commit)由驱动程序负责;false:sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法

时间: 2024-11-02 03:19:13

Hibernate和jdbc事务原理的相关文章

Hibernate与JDBC事务整合

一般大家都会使用Spring声明型事务 transactionAttributes 为 PROPAGATION_REQUIRED Hibernate 使用 HibernateTransactionManager .JDBC(iBATIS) 使用 DataSourceTransactionManager 当需要将它们整合到一个事务中的时候 普通的做法是配置统一的DataSource, Hibernate与JDBC(iBATIS) 都使用HibernateTransactionManager 坛子里

分层架构下的纯JDBC事务控制简单解决方案【转】

http://blog.csdn.net/qjyong/article/details/5464835 对目前的JavaEE企业应用开发来说,基本都会采用分层的架构, 这样可以分散关注.松散耦合.逻辑复用.标准定义.例如,目前使用SSH组合时典型的四层架构:表示层.业务层.持久层和数据层:那么,在四层架构中,事务的控制应该放在哪一层呢? 如果使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层:但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的.

spring 声明式事务原理解读

在Spring中,声明式事务是通过事务属性(transaction attribute)来定义的.事务属性描述了事务策略如何应用到方法上.事务属性包含5个方面: 传播行为 隔离级别 是否只读 事务超时 回滚规则 尽管Spring提供了多种声明式事务的机制,但是所有的方式都依赖这五个参数来控制如何管理事务策略. (上述内容参考<Spring In Action>第三版). 对于声明式事务是使用Spring提供的tx配置命名空间.其中一些声明式事务配置元素依赖于部分Spring的AOP配置元素.

Java中的事务——JDBC事务和JTA事务

本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解. Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现.所以本文暂不讨论容器事务.本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务. JDBC事务 JDBC事务,就是在Java中用来控制

Java的JDBC事务详解

一.事务的理解: 1.事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行. 2) 一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态.在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性. 3) 隔离性(isolation):一个事务的执行不能被其他事务所影响. 4) 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中.即

JDBC事务控制

JDBC事务控制事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功.例如转账,一方多了,一方少了同时执行.mysql数据库默认事务是自动提交的,即一条SQL语句就是一个单独的事务,是自动提交的.Oracle数据库默认是事务不是自动提交的,没一句都需要手动提交事务,否则默认为都是同一个事务.对于多条sql放在同一个事务中需要使用事务命令start transaction 开启事务(所有增删改查都在临时表中进行) Rollback 回滚事务(取消操作) Commit 提交事

Hibernate配置与事务管理

数据库中 @num:代表一个变量 Set @num = 10; Select @[email protected] from dual;  dual:临时表 得到结果 20 Hibernate:运用数据持久化,使用ORM框架 JSP:java server page ORM:object relationship mapping Hibernate:对JDBC进行轻量级的对象封装,可取代CMP(容器管理持久化),完成数据持久化的重任 JDBC:java数据连接技术 java database c

Hibernate和JDBC、EJB比较

参考:http://m.blog.csdn.net/article/details?id=7228061 一.Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系.Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码.从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系. 二.Hibernat

day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)

day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbutils ? 事务 ? 事务的四大特性:ACID: mysql中操作事务 jdbc中操作事务 ? ? ? 事务概述 为了方便演示事务,我们需要创建一个account表: CREATE TABLE account( ????id INT PRIMARY KEY AUTO_INCREMENT, ????NA