Hibernate事务配置

#2020云栖大会#阿里云海量offer来啦!投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>> hot3.png

// Hibernate事务管理 //



9b88f699cf937fd0f01d8bdbb3107d04750.gif


  1. 事务

  2. 设置事务级别

  3. 事务服务层连接




0 1 事务


什么是事务?


逻辑上的一组操作,要么一起成功,要么就都不算。不能有的执行了,有的没执行



事务的特性?

原子性

事务不能分隔

隔离性执行一个事务时, 不应受到其它事务的干扰
一致性事务执行前后 ,数据的完整性要保持一致
持久性操作完成后就在数据库中



事务的隔离级别?


Read uncommitted所有问题都会发生
Read committed解决脏读问题
Repeatable read解决脏读和不可重复读
Serializable解决所有问题,效率较低

隔离级别详细SQL事务



02 设置事务隔离级别


在核心配置文件hibernate.cfg.xml当中

通过数字来代表不同的隔离级别

<property name="hibernate.connection.isolation">4</property>

设置的值是1,2,3,4代表四个隔离级别



03 事务业务层连接


为什么在服务层使用事务?


在dao层的工作是连接数据库做各个基本功能,比如增删改查等。而服务层的作用才是去组织dao的小功能去实现完整的业务逻辑并返回结果给web层



在外部处理时session怎么保持一致?

8d8e83a042dd982ee158012d9804de6a452.png

因为开启事务需要session所以服务层需要用到session,而且事务里面语句用的session也应该是一个。那么怎么能保证服务层用的session和事务中两个方法的session一样呢?



首先很容易想到的就是从上往下传递的方式

TestService{
   Session session = HibernateUtil.openSession();
    dao.session = session;
   test(){
       Transaction tra = session.beginTransaction();
       dao.insertMoney();
       dao.update();
       tra.commit();
   }
public TestDao{    public static Session session;    public void insertMoney(){
       session.save(obj);
   }    
   public void insertMoney(){
       session.save(obj);
   }

}

但这样有点太笨重,在Hibernate内部绑定了个session在ThreadLocal,也就是说在一次完整请求中即是在一次线程上有一个session,只需要获取这个session那肯定就是同一个session了


默认这个是关闭的,需要在核心配置文件打开

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


并且这个session不需要手动关闭,执行完后会自动关闭

TestService{

   SessionFactory sf = HibernateUtil.getSessionFactory();
   test(){
       Transaction tra = sf.getCurrenSession().beginTransaction();
       dao.insertMoney();
       dao.update();
       tra.commit();
   }
}

public TestDao{    
   SessionFactory sf = Hibernate.getSessionFactory();    public void insertMoney(){  
      sf.getCurrentSession().session.save(obj);
   }      
   public void insertMoney(){  
      sf.getCurrentSession().session.save(obj);  
   }
}





705b5ed383eb66d276046bcca6f2fcfae6b.png eccb18e2a4d7eb3248111236228728a3766.jpg

它,

不仅仅是一个码



本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值