zoukankan      html  css  js  c++  java
  • Hibernate入门(五)---------事务管理

      在Hibernate中,可以通过代码来操作管理事务,如通过“Transaction tx = session.beginTransaction()”,开启一个事务,持久化操作后,通过"tx.commit()",提交事务,如果事务出现异常又通过"tx.rollback()".操作来撤销事务(事务回滚)。

      除了在代码中对事务开启,提交和回滚操作外,还可以在Hibernate的配置文件中对事务进行配置,配置文件中,可以设置事务的隔离级别。其具体的配置方法是在hibernate.cfg.xml文件中的<session-factory>标签中进行的。配置方法如下:

      

    <!--
        事务管理
        hibernate.connection.isolation = 4
        1---Read uncommitted isolation
        2---Read committed isolation
        4---Repeatable read isolation
        8---Serializable isolation
     -->
    <property name = "hibernate.connection.isolation"/>

    如何保证在Service中开启事务时使用的Session对象和DAO中多个操作使用的是同一个Session对象。

      其实有两种办法可以实现:

        1.可以在业务层获取到Session,并将Session作为参数传递给DAO。

        2.可以使用ThreadLocal将业务层获取到的Session绑定到当前线程中,然后在DAO中获取Session的时候,都从当前线程中获取。

      其实使用第二种方式肯定是最优方案,那么具体的实现已经不用我们来完成了,Hibernate的内部已经将这个事情做完了。我们只需要完成一段配置即可。

      Hibernate5自身提供了三种管理Session对象的方法:

        Session对象的生命周期与本地线程绑定

        Session对象的生命周期与JTA事务绑定

        Hibernate委托程序管理Session对象的生命周期

      在Hibernate的配置文件中,hibernate current_session_context_class 属性用于指定Session管理方式 可选值包括:

        thread:Session 对象的生命周期与本地线程绑定。

        jta:Session对象的生命周期与JTA事务绑定

        managed:Hibernate委托程序来管理Session对象的生命周期

      在hibernate.cfg.xml中进行如下配置;

    <!--配置session绑定本地线程 -->
    <property name = "hibernate.current_session_context_class">thread></property>

      hibernate提供sessionFactory.getCurrentSession()创建一个session和ThreadLocal绑定方法:

      在HibernateUtil工具类中更改getCurrentSession方法;

    //获取当前线程绑定的会话
    public static Session getCurrentSession(){
        return sessionFactory.getCurrentSession();   
    }

      而且Hibernate中提供的这个与线程绑定的session可以不用关闭,当线程执行结束后,就会自动关闭了。

  • 相关阅读:
    771. Jewels and Stones
    706. Design HashMap
    811. Subdomain Visit Count
    733. Flood Fill
    117. Populating Next Right Pointers in Each Node II
    250. Count Univalue Subtrees
    94. Binary Tree Inorder Traversal
    116. Populating Next Right Pointers in Each Node
    285. Inorder Successor in BST
    292. Nim Game Java Solutin
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/9864722.html
Copyright © 2011-2022 走看看