Hibernate常见配置

淩亂°似流年 2022-05-17 01:05 353阅读 0赞

1.1事务

1.1.1回顾
事务:一组业务操作,要么全部成功,要么全部不成功。
特性:ACID
原子性:整体
一致性:数据
隔离性:并发
持久性:结果
隔离问题:
脏读:一个事务读到另一个事务未提交的内容
不可重复读:一个事务读到另一个事务已提交的内容(insert)
虚读(幻读):一个事务读到另一个事务已提交的内容(update)
隔离级别–解决问题
read uncommittd,读未提交。存在3个问题。
read committed,读已提交。解决:脏读。存在2个问题。
repeatable read ,可重复读。解决:脏读、不可重复读。存在1个问题。
serializable,串行化。单事务。没有问题。
这里写图片描述
1.1.2hibernate设置隔离级别
在hibernate.cfg.xml 配置
hibernate.connection.isolation 4
这里写图片描述
1.1.3lost update 丢失更新
这里写图片描述
悲观锁:丢失更新肯定会发生。
采用数据库锁机制。
读锁:共享锁。
select …. from … lock in share mode;
写锁:排他锁。(独占)
select … from …. for update
这里写图片描述
乐观锁:丢失更新肯定不会发生
在表中提供一个字段(版本字段),用于标识记录。如果版本不一致,不允许操作。
这里写图片描述
1.1.4hibernate处理丢失更新

悲观锁:写锁
这里写图片描述

  1. @Test
  2. public void demo01(){
  3. //1 查询所有
  4. Session session = factory.openSession();
  5. session.beginTransaction();
  6. Customer customer = (Customer) session.get(Customer.class, 1 ,LockMode.UPGRADE);
  7. System.out.println(customer);
  8. session.getTransaction().commit();
  9. session.close();
  10. }

这里写图片描述
乐观锁:
在PO对象(javabean)提供字段,表示版本字段。一般Integer
在*.hbm.xml 文件配置

步骤一:
这里写图片描述
步骤二:
这里写图片描述
这里写图片描述
步骤三:测试

  1. @Test
  2. public void demo02(){
  3. //1 查询所有
  4. Session session = factory.openSession();
  5. session.beginTransaction();
  6. // Order order = new Order();
  7. // order.setPrice(998d);
  8. // session.save(order);
  9. Order order = (Order) session.get(Order.class, 32);
  10. order.setPrice(889d);
  11. session.getTransaction().commit();
  12. session.close();
  13. }

over~~~

发表评论

表情:
评论列表 (有 0 条评论,353人围观)

还没有评论,来说两句吧...

相关阅读