欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate的事务管理

程序员文章站 2022-07-04 23:38:13
...

一. Hibernate中指定隔离级别

1. 配置 文件

<!-- 指定Hibernate操作数据库时的隔离级别 
		## specify a JDBC isolation level
		#hibernate.connection.isolation 1,2,48
		0001   1  读未提交
		0010   2  读已提交
		0100   4  可重复读
		1000   8  串行化
		-->
		<property name = "hibernate.connection.isolation">4</property>

二. 在项目中如何管理事务

1. 业务开始之前打开事务,业务结束之后关闭事务,业务执行过程中出现异常,回滚事务。

2. 在Hibernate中,确保使用同一个 session对象,开发人员需要调用sf.getCurrentSession()方法即可获得与 当前线程绑定的Session对象。

3. 调用getCurrentSession方法必须有一段主配置

<!-- 指定session与当前线程绑定 -->
		<property name="hibernate.current_session_context_class">thread</property>

注意:通过getCurrentSession方法获得的session对象在 事务提交时会自动关闭,不用我们手动关闭,如果手动关闭了,会抛出异常。

 

三. 客户管理系统中的改造

1. 改造service层

public class CustomerServiceImpl implements CustomerService {

	private CustomerDao customerDao = new CustomerDaoImpl();
	
	public void save(Customer c) {
		// TODO Auto-generated method stub
		//调用Dao保存客户
		Session session = HibernateUtils.getCurrentSession();
		//打开事务
		Transaction tx = session.beginTransaction();
		
		//调用dao保存客户
		try{
		customerDao.save(c);
		}catch(Exception e){
			e.printStackTrace();
			tx.rollback();
		}
		
		tx.commit();
	}

}

2. 改造Dao层

public class CustomerDaoImpl implements CustomerDao {

	public void save(Customer c) {
		// TODO Auto-generated method stub
		//1. 获得Session
		Session session = HibernateUtils.getCurrentSession();
		
		//2. 执行保存
		session.save(c);
		
	}

}