Hibernate学习----事务与管理session

73 篇文章 0 订阅
52 篇文章 0 订阅

事务

            1.事务特性:ACID

  •               原子性:整体
  •               一致性:数据
  •               隔离性:并发
  •               持久性:结果

           2.隔离问题:

  •        脏读:一个事务读到另一个事务没哟提交数据
  •        不可重复读:一个事务读到另一个事务已经提交数据(update)
  •        幻读(虚读):一个事务读到另一个事务已经提交数据(insert)

           3.隔离级别:

  •        读未提交:read uncommitted, 一个事务读到另一个事务没哟提交数据。存在3个问题
  •        读已提交:read committed,一个事务读到另一个事务已经提交数据。解决:脏读;存在2个问题
  •        可重复读:repeatable read,一个事务读到数据一直重复。解决:脏读、不可重复读;存在1个问题
  •        串行化:serializable,单事务

          hibernate隔离级别:

          在hibernate.cfg.xml中配置: hibernate.connection.isolation = 4

 lost upload 丢失更新

  •        悲观锁:丢失更新问题肯定发生。
                      使用数据库锁机制,mysql数据库锁
  •        读锁:共享锁,多个事务可以同时操作。
                       select ... lock in share mode
  •        写锁:排他锁,独占,每一次只能由一个事务进行操作。
                       select ... for update
                       注意:数据库的锁必须在事务中使用。
  •        乐观锁:丢失更新肯定不发生
                      在表中添加一个字段,用于记录操作版本,如果版本不一致,将不允许提交。

                hibernate操作:

  • 乐观锁 :
       <version name="属性"> 类型必须整形,hibernate自动维护数据累加

       <timestamp name=""> 类型 java.sql.Timestamp ,只要操作,数据库默认使用自动当前时间。
       <class optimistic-lock="all" > 以所有的字段版本控制

  • 悲观锁:      session.get(Class,OID, LockMode. UPGRADE)

管理session

               1.api操作

  • factory.openSession() 开发一个新的回话
  • factory.getCurrentSession() 获得当前线程中绑定的session

               2.hibernate session管理配置

  • ThreadLocal 线程本地变量,在一个线程中共享数据。
    Thread.currentThread() 获得当前线程
    ThreadLocal 底层使用Map<Thread,Object>
                         map.key : 当前线程
                         map.value :在当前线程需要共享数据
  •  api
     get() -- map.get(当前线程)
     set(value) -- map.put(当前线程, value)
     remove() -- map.remove(当前线程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值