首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate事务配置

Hibernate事务配置

作者头像
木瓜煲鸡脚
修改2019-09-17 17:10:58
6710
修改2019-09-17 17:10:58
举报
文章被收录于专栏:Jasper小笔记Jasper小笔记

//

Hibernate事务管理

//

  1. 事务
  2. 设置事务级别
  3. 事务服务层连接

01

事务

什么是事务?

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

事务的特性?

原子性

事务不能分隔

隔离性

执行一个事务时, 不应受到其它事务的干扰

一致性

事务执行前后 ,数据的完整性要保持一致

持久性

操作完成后就在数据库中

事务的隔离级别?

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怎么保持一致?

因为开启事务需要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);  
    } 
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档