`

Hibernate事务全面介绍

    博客分类:
  • SSH
 
阅读更多

Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate事务,包括介绍在sessionFactory.openSession()中,Hibernate会初始化数据库连接等方面。

Hibernate是JDBC的轻量级封装,本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。

Hibernate事务处理机制基于JDBC Transaction.我们也可以通过配置文件设定采用JTA作为事务管理实现:

  1. <hibernate-configuration> 
  2. <session-factory> 
  3. ……  
  4. <property name="hibernate.transaction.factory_class"> 
  5. net.sf.hibernate.transaction.JTATransactionFactory  
  6. <!--net.sf.hibernate.transaction.JDBCTransactionFactory--> 
  7. </property> 
  8. ……  
  9. </session-factory> 
  10. </hibernate-configuration> 

基于JDBC的事务管理将事务管理委托给JDBC 进行处理无疑是最简单的实现方式,Hibernate事务对于JDBC事务的封装也极为简单。
我们来看下面这段代码:

  1. session = sessionFactory.openSession();  
  2. Transaction tx = session.beginTransaction();  
  3. ……  
  4. tx.commit(); 

从JDBC层面而言,上面的代码实际上对应着:

  1. Connection dbconn = getConnection();  
  2. dbconn.setAutoCommit(false);  
  3. ……  
  4. dbconn.commit(); 

就是这么简单,Hibernate并没有做更多的事情(实际上也没法做更多的事情),只是将这样的JDBC代码进行了封装而已。

这里要注意的是,在sessionFactory.openSession()中,hibernate会初始化数据库连接,与此同时,将其 AutoCommit 设为关闭状态(false)。而其后,在Session.beginTransaction 方法中,Hibernate 会再次确认Connection 的AutoCommit 属性被设为关闭状态( 为了防止用户代码对session 的Connection.AutoCommit属性进行修改)。

这也就是说,我们一开始从SessionFactory获得的session,其自动提交属性就已经被关闭(AutoCommit=false),下面的代码将不会对数据库产生任何效果:

  1. session = sessionFactory.openSession();  
  2. session.save(user);  
  3. session.close(); 

这实际上相当于 JDBC Connection的AutoCommit属性被设为false,执行了若干JDBC操作之后,没有调用commit操作即将Connection关闭。如果要使代码真正作用到数据库,我们必须显式的调用Transaction指令:

  1. session = sessionFactory.openSession();  
  2. Transaction tx = session.beginTransaction();  
  3. session.save(user);  
  4. tx.commit();  
  5. session.close(); 
分享到:
评论

相关推荐

    第24次课-1 Spring与Hibernate的整合

    方便的事务管理:Spring提供的声明式事务处理可以全面有效地处理事务。 异常包装:Spring能够包装Hibernate的异常,使开发者可以选择恰当的层来处理异常。 24.2 管理SessionFactory Hibernate的SessionFactory,是...

    1、高质量在线招标系统(spring+springmvc+hibernate)

    该系统以Spring框架为基石,辅以Spring MVC和Hibernate两大技术利器,共同构筑起一个功能全面、性能卓越的在线招标平台。 Spring框架的引入,为系统注入了强大的生命力。它以其灵活性和扩展性,为系统的开发提供了...

    项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5).zip

    该系统利用了Java EE技术栈中的一些最强大的技术,包括Struts2用于MVC架构的Web层,Spring框架用于依赖注入和事务管理,Hibernate作为ORM工具以简化数据库操作,JSP用于前端页面的展示,以及MySQL 5数据库用于持久化...

    移动ssh项目(struts+spring+hibernate+oracle)130222.rar

    此项目资料包为开发者提供了一个全面的、可立即部署的开发环境,旨在帮助学习者、教育者和专业人士快速掌握和运用这些技术进行企业级Web应用开发。Struts作为项目的MVC(模型-视图-控制器)框架,简化了Java Web应用...

    ssh学生事务管理系统

    学生事务管理系统包括学生请假 班级课程表等信息的操作,功能全面,分三个等级用户登录管理员、老师、学生,可以作为毕业设计的工程

    struts2+spring+hibernate

    框架配置较为全面,事务,切面,各种拦截器,且都为注解式开发模式,可应用在实际项目中,如有问题,加群:428476908,此为初始版本,如果有机会,会完善前台

    spring事务管理.doc

    自己整理的spring事务处理文档,自我感觉比较全面。呵呵。

    Java EE轻量级解决方案S2SH

    本书介绍了Java EE轻量级的三个开源框架:Struts2、Hibernate和Spring。其中在Struts2部分主要讲解MVC设计思想,Struts2的处理流程及配置,Struts2常用控制器组件,以及Struts2常用标签库的使用。在Hibernate部分...

    Spring应用开发完全手册 源码

    本书以使用Spring框架技术开发网络应用程序的实用技术为中心,全面、系统地介绍了使用Spring框架技术开发应用程序时必须掌握的基础知识、高级应用技术、方法和开发过程。本书分为四篇,共20章。主要内容包括Spring...

    SSH框架与AJAX技术的Java_Web应用开发(4页,pdf书籍)不是代码

    JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的拦截器、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和事务管理等,Spring中...

    Spring2.0宝典 源码

    全书分22章,内容涵盖了Spring的核心机制、依赖注入、资源访问、AOP框架、事务框架、整合Hibernate、DAO支持、JDBC支持、MVC框架、整合第三方表现层技术、整合第三方MVC框架、远程访问支持、EJB访问和实现、Spring对...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》介绍了Web开发中客户端技术的基础知识,包括JavaScript、CSS、AJAX等,这些技术都是Web应用中常用的客户端技术。 《Java Web开发技术大全:JSP+...

    spring2.5学习PPT 传智博客

    01_全面阐释Spring及其各项功能 02_搭建与测试Spring的开发环境 03_编码剖析Spring管理Bean的原理 04_Spring的三种实例化Bean的方式 05_配置Spring管理的bean的作用域 06_Spring管理的Bean的生命周期 07_编码...

    java web开发技术大全

    JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和事务管理等,Spring中的...

    Atomikos3.9官方包文档以及实例

    l 全面崩溃 / 重启恢复 l 兼容标准的SUN公司JTA API l 嵌套事务 l 为XA和非XA提供内置的JDBC适配器 注释:XA:XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前...

    spring3.2中文文档

    您可以使用IoC容器, Struts在上,但是你也可以只使用 Hibernate集成代码 或 JDBC抽象层 。 spring 框架支持声明式事务管理、远程访问 你的逻辑通过RMI或web服务,以及各种选项 坚持你的数据。 它提供了一个功能全面的...

    基于 JSP 的图书管理系统毕业设计论文

    书馆管理事务中的常见基本问题等研究背景,进行了全面的可行性分析,详细论 证了系统的需求分析、系统设计、系统实现和系统测试过程。 本系统使用 JSP 进行网页界面的设计,使用 MVC设计模式,采用开源框架 Struts ...

    spring 平台很全面例子

    spring 平台例子,提供了项目中基本你能想到的例子应用, email、jmx、ejb、aop、事务、mvc、spring mvc、authentication、jbpm、flex、rest、osgi、springbatch、web_flow、portletmvc

    源码基于JSP的龙门物流管理系统(Ext+SSH).rar

    系统后端采用了强大的Spring框架,Spring框架提供了全面的企业级支持,包括但不限于依赖注入、事务管理等特性。此外,Hibernate作为对象关系映射(ORM)工具被用于数据持久层的操作,它将Java对象映射到数据库表中,...

Global site tag (gtag.js) - Google Analytics