1.前言

上一篇博客解说了Hibernate中的一级缓存,属于Session级别的。这篇博客解说一下Hibernate中的事务机制。

有关事务的概念。请參照通俗易懂数据库中的事务。

 2.怎样处理Hibernate中的事务

我们知道数据库中的事务,会造成一些影响。比方脏读、不可反复读、幻读。

那么怎样解决这些问题呢?

1.隔离级别设置

通过设置数据库的隔离级别能够消除一些影响。请參照博客通俗易懂数据库中的事务。

在hibernate中也有四种隔离级别,各自是

1—Read uncommitted isolation

2—Read committed isolation

4—Repeatable read isolation

8—Serializable isolation

假设要设置hibernate的事务隔离级别的话,直接加入例如以下语句就可以

<span style="font-family:SimSun;font-size:18px;"><!-- 设置事务隔离级别 --><property name="hibernate.connection.isolation">4</property></span>

2.丢失更新怎样解决

悲观锁

採用数据库内部锁的机制。在一个事务操作数据时。为数据加锁。还有一个事务无法訪问。例如以下所看到的:

<span style="font-family:SimSun;font-size:18px;">Customer customer = (Customer) session.load(Customer.class, 1,LockMode.UPGRADE); </span>

採用上述后,在查询数据时 加入排它锁,默认生成的SQL语句例如以下

select * from customers for update;

解释:採用排他锁的话。一旦锁住,别人就无法訪问。

乐观锁

乐观锁与数据库无关。在数据表中为数据加入版本号字段,每次数据改动都会导致版本号号+1

分析,正如上图所看到的,每一个事务之前都会先去拿一下版本号字段,当改动完毕提交时,会再去核对一下眼下拿到的版本号字段与数据库是否一致,假设不一致的话就会报错。

用的时候仅仅需在定义中增加版本号字段就可以

<span style="font-family:SimSun;font-size:18px;"><!-- 定义版本号字段 --><!-- name是属性名 --><version name="version"></version>
</span>

转载于:https://www.cnblogs.com/gavanwanggw/p/6888415.html

具体解释Hibernate中的事务相关推荐

  1. HIbernate中的事务

    什么是事务 在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元.当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果有一项 ...

  2. Java程序员从笨鸟到菜鸟之(八十)细谈Spring(九)spring+hibernate声明式事务管理详解

    声明式事务管理是spring对事务管理的最常用的方式,因为这种方式对代码的影响最小,因此也符合非侵入性的轻量级容器的概念.Spring的事务管理是通过AOP的方式来实现的,因为事务方面的代码与spri ...

  3. spring 同时配置hibernate and jdbc 事务

    http://blog.csdn.net/mypop/article/details/6120377 在项目中同时用到了JDBC和Hibernate,分别配置了各自的事务,同时配置了不同的tx:ann ...

  4. Spring中的事务控制

    Chapter 1. Spring中的事务控制(Transacion Management with Spring) Table of Contents 1.1. 有关事务(Transaction)的 ...

  5. Spring中的事务控制(Transacion Management with Spring)

    1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持1.2.2 ...

  6. hibernate中对象的状态有三种

    一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...

  7. JavaEE_Spring_Spring中的事务声明, 事务隔离和事务传播等

    最近面试经常被问到事务的隔离与事务传播等方面的知识,现在留下一篇博文整理了网上几篇博文的资料.记录一下 0.Spring中的事务以及事务声明 这里只讲解Spring中的事务,对于SQL事务的概念以及A ...

  8. 一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别

    最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...

  9. Spring中的事务控制学习中(转)

    1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身 1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持 1.2 ...

最新文章

  1. Cmake 交叉编译
  2. Web API之基于H5客户端分段上传大文件
  3. 51Nod 1007 正整数分组 | DP (01背包)
  4. 反编译apk文件教程(查看java代码篇)
  5. 探访火车票“守护者”:一卷票据值百万 压力大到失眠
  6. 浅入深出Vue:文章编辑
  7. java 微信 回复_微信java 开发2 发送文本消息并回复
  8. 警惕cocos2d-x Win32下资源命名大小写
  9. 一般处理程序页ashx 序列化 Json数组
  10. 如何用Lucene实现实时搜索--Tripod
  11. 闭环计算机控制系统的例子,自动控制的举例_自动控制的例子_开环和闭环自动控制系统举例...
  12. 实验二:线性时间选择
  13. 《MATLAB 神经网络43个案例分析》:第14章 基于SVM的数据分类预测——意大利葡萄酒种类识别
  14. ISCC2021-部分题目再现
  15. Java网络象棋游戏(功能版)
  16. 有哪些好用的微信群管理工具?
  17. c++filt解码已损坏的函数名称
  18. CPU与GPU区别 通俗易懂
  19. 最逼近Mac OS的Linux系统 -- Elementary OS
  20. 制作网上投票链接制作可以投票的链接制作制作一个投票链接

热门文章

  1. Effective C++ 之 Item 6 : 若不想使用编译器自动生成的函数,就该明确拒绝
  2. 几个软件商店的网址和使用 备忘
  3. Tomcat启动分析server.xml
  4. .WM_CTLCOLOR和OnCtlColor消息的用法
  5. oracle伪客户端的安装(oracle不安装客户端)
  6. 机器学习之sklearn——聚类
  7. [Android] 获取设备的APP信息
  8. [转]总不能一辈子做助理
  9. 图解Ubuntu 9.10 Alpha 6
  10. feign 请求超时,请求没有到服务端