hibernate的事务处理机制底层原理剖析

上传人:沈*** 文档编号:79994147 上传时间:2022-04-24 格式:DOC 页数:3 大小:27.50KB
返回 下载 相关 举报
hibernate的事务处理机制底层原理剖析_第1页
第1页 / 共3页
hibernate的事务处理机制底层原理剖析_第2页
第2页 / 共3页
hibernate的事务处理机制底层原理剖析_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述
hibernate的事务处理机制底层原理剖析Hibernate是对JDBC的轻量级对象封装, Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装,下面我们详细的分析:Hibernate可以配置为JDBCTransaction或者是JTATransaction,这取决于你在hibernate.properties中的配置:#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory#hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory如果你什么都不配置,默认情况下使用JDBCTransaction,如果你配置为:hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory将使用JTATransaction不管你准备让Hibernate使用JDBCTransaction,还是JTATransaction,我的忠告就是什么都不配,将让它保持默认状态,如下:#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory#hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory在下面的分析中我会给出原因。一、JDBC Transaction看看使用JDBC Transaction的时候我们的代码例子:Session session = sf.openSession();Transaction tx = session.beginTransactioin();.session.flush();mit();session.close();这是默认的情况,当你在代码中使用Hibernate的Transaction的时候实际上就是JDBCTransaction。那么JDBCTransaction究竟是什么东西呢?来看看源代码就清楚了:Hibernate2.0.3源代码中的类net.sf.hibernate.transaction.JDBCTransaction:public void begin() throws HibernateException .if (toggleAutoCommit) session.connection().setAutoCommit(false);.这是启动Transaction的方法,看到 connection().setAutoCommit(false) 了吗?是不是很熟悉?再来看public void commit() throws HibernateException .try if ( session.getFlushMode()!=FlushMode.NEVER ) session.flush();try session.connection().commit();committed = true;.toggleAutoCommit();这是提交方法,看到connection().commit() 了吗?下面就不用我多说了,这个类代码非常简单易懂,通过阅读使我们明白Hibernate的Transaction都在干了些什么?我现在把用 Hibernate写的例子翻译成JDBC,大家就一目了然了:Connection conn = .; - session = sf.openSession();conn.setAutoCommit(false); - tx = session.beginTransactioin();. - .mit(); - mit(); (对应左边的两句)conn.setAutoCommit(true);conn.close(); - session.close();看明白了吧,Hibernate的JDBCTransaction根本就是mit而已,根本毫无神秘可言,只不过在Hibernate中, Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写 commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写 Transaction的话,数据库根本就没有反应。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!