hibernate如何在项目中控制事务

   我们一般在service层控制事务,但是我们获得与数据库的会话对象是在dao层。控制事务又必须得是同一个session,还记得我们在servlet中使用的是线程本地化。其实hibernate也同样是这个道理,不过在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象。

 dao层代码演示:

public void save(Customer customer) {
		Session session=HibernateUtils.getCurrentSession();
		session.save(customer);
	}

service层代码演示:

public void save(Customer customer) {
		CustomerDao dao=new CustomerDaoImpl();
		Session session=HibernateUtils.getCurrentSession();
		Transaction ts = session.beginTransaction();
		
		try{
			dao.save(customer);
		}catch(Exception e){
			e.printStackTrace();
			ts.rollback();
		}
		ts.commit();
		//注意,通过这个方法获得的Session对象,不用手动关闭,而是自动关闭。
	}

两个注意事项:

注意1: 调用getCurrentSession方法必须配合主配置中的一段配置

<!-- 指定session与当前线程绑定 -->
		 <property name="hibernate.current_session_context_class">thread</property>
注意2:通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.



展开阅读全文

没有更多推荐了,返回首页