Hibernate中同一个线程获取相同session

来源:互联网 发布:淘宝退款商家不处理 编辑:程序博客网 时间:2024/05/17 22:01

为什么

在Hibernate中事物是与session相关的,一般情况下session会在Service层创建,

Service中

Session session = HibernateUtils.openSession()

tx = session.beginTransaction();

dao.save();
dao.xxx();

tx.commit();


在Dao中就需要使用session.save()或者session.xxx(),而为了在同一个事物中执行这两个方法,所以在这两个方法中应该使用与Service中一样的session

怎么办

将session传递给dao层,即给为dao.save(session,obj)

session对象的生命周期与当前线程绑定

1.在hibernate.cfg.xml中定义常量

<property name="hibernate.current_session_context_class">thread</property>


2.使用

在HibernateUtils里面添加一个方法

public Session getCurrentSession(){return sessionFactory.getCurrentSession;}


3.注意

通过该方法获得的session对象,都不需要手动关闭,因为当当前线程结束的时候会自动关闭该session,如果手动调用的话还会出错

因为如果已经手动关掉了,线程结束的时候又关掉一次,就是重复关闭一个对象,显然会出错

0 0
原创粉丝点击