具体解释Hibernate中的事务
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中的事务相关推荐
- HIbernate中的事务
什么是事务 在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元.当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果有一项 ...
- Java程序员从笨鸟到菜鸟之(八十)细谈Spring(九)spring+hibernate声明式事务管理详解
声明式事务管理是spring对事务管理的最常用的方式,因为这种方式对代码的影响最小,因此也符合非侵入性的轻量级容器的概念.Spring的事务管理是通过AOP的方式来实现的,因为事务方面的代码与spri ...
- spring 同时配置hibernate and jdbc 事务
http://blog.csdn.net/mypop/article/details/6120377 在项目中同时用到了JDBC和Hibernate,分别配置了各自的事务,同时配置了不同的tx:ann ...
- Spring中的事务控制
Chapter 1. Spring中的事务控制(Transacion Management with Spring) Table of Contents 1.1. 有关事务(Transaction)的 ...
- Spring中的事务控制(Transacion Management with Spring)
1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持1.2.2 ...
- hibernate中对象的状态有三种
一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...
- JavaEE_Spring_Spring中的事务声明, 事务隔离和事务传播等
最近面试经常被问到事务的隔离与事务传播等方面的知识,现在留下一篇博文整理了网上几篇博文的资料.记录一下 0.Spring中的事务以及事务声明 这里只讲解Spring中的事务,对于SQL事务的概念以及A ...
- 一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别
最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...
- Spring中的事务控制学习中(转)
1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身 1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持 1.2 ...
最新文章
- Cmake 交叉编译
- Web API之基于H5客户端分段上传大文件
- 51Nod 1007 正整数分组 | DP (01背包)
- 反编译apk文件教程(查看java代码篇)
- 探访火车票“守护者”:一卷票据值百万 压力大到失眠
- 浅入深出Vue:文章编辑
- java 微信 回复_微信java 开发2 发送文本消息并回复
- 警惕cocos2d-x Win32下资源命名大小写
- 一般处理程序页ashx 序列化 Json数组
- 如何用Lucene实现实时搜索--Tripod
- 闭环计算机控制系统的例子,自动控制的举例_自动控制的例子_开环和闭环自动控制系统举例...
- 实验二:线性时间选择
- 《MATLAB 神经网络43个案例分析》:第14章 基于SVM的数据分类预测——意大利葡萄酒种类识别
- ISCC2021-部分题目再现
- Java网络象棋游戏(功能版)
- 有哪些好用的微信群管理工具?
- c++filt解码已损坏的函数名称
- CPU与GPU区别 通俗易懂
- 最逼近Mac OS的Linux系统 -- Elementary OS
- 制作网上投票链接制作可以投票的链接制作制作一个投票链接