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);
}
}
上一篇: 操作系统读者写者问题