Hibernate 事务总结
2019独角兽企业重金招聘Python工程师标准>>>
一.事务的定义
1.物理上的数据库事务
2.逻辑上事务与persistence context有关
3.应用程序上的事务指的是一个工作单元
二.物理事务
hibernate支持JDBC和JTA事务处理
TransactionFactory的两个功能:
1.让hibernate理解当前环境的事务语义,例如当时是一个JTA环境?当前物理事务是活跃的?
2.充当org.hibernate.Transaction工厂,允许应用程序去管理和检查事务状态org.hibernate.Transaction是hibernate中逻辑事务的概念,JPA中有类似的javax.persistence.EntityTransaction接口,但是只支持resource-local事务
3.物理事务JDBC
使用
java.sql.Connection.commit()
和 java.sql.Connection.rollback(),设置autocommit为false,对应的事务工厂类JdbcTransactionFactory
4.物理事务JTA
使用javax.transaction.UserTransaction从底层org.hibernate.service.jta.platform.spi.JtaPlatform,对应的事务工程类JtaTransactionFactory
5.物理事务CMT
使用JTAjavax.transaction.TransactionManager,从底层org.hibernate.service.jta.platform.spi.JtaPlatform,对应的事务工程类CMTTransactionFactory,在实际JEE CMT环境,获取javax.transaction.UserTransaction是受限的。这里的CMT简单说就是事务不由hibernate transcation api管理,而由容器管理
6.物理事务custom
自己实现接口org.hibernate.engine.transaction.spi.TransactionFactory,初始器hibernate.transaction.factory_class,通过传入实例或者类名(必须有无参构造函数)
7.物理事务遗留
transactionFactory已经移到其他目录,短暂支持一段时间
三.事务使用
hibernate没有任何内存加锁,直接使用JTA和JDBC连接,事务完全依赖数据库的隔离级别,session提供事务级别的cache。
避免数据库锁竞争,保持物理数据库事务尽量短。
四.事务模式和反模式
1.session-per-operation反模式
每个数据库操作都提交事务,开关session
2.session-per-request模式
最常见模式,从请求开始处打开session,开始事务,然后执行一系列操作,最后提交事务,关闭session
session和事务是一对一的关系
为避免在应用中传递session,SessionFactory提供getCurrentSession方法,‘current’取决于currentsessioncontext
2种sessioncontext范围
JTASESSIONCONTEXT,提供回调,当事务结束时可以关闭session,session在事务范围内第一次调用getCurrentSession时打开
ManagedSessionConext,由应用程序自己管理范围,在范围的开始调用bind方法,在结束处调用unbind,通常由一个外部组件来管理生命周期,例如AOP拦截器或者Filter
3.conversation
长会话跨多个数据库事务,要保持原子性只有是前面的事务是读,只有一个事务是写(通常是最后一个),自动版本检查可以检查并发修改
session-per-request-with-detachedobjects,在用户思考时间,所有实体对象处于detached状态,hibernate允许重新attach对象到一个新的session用于更新和持久化
session-per-conversation,hibernate允许session断开底层jdbc连接,在新请求到来时重新连接,而且是同一个session,但是session不允许设置自动flush,必须显示调用
五.对象同一性和数据库同一性
一个应用程序可以并发的访问一个持久化状态(即数据库行),但是同一个持久化实例不会在多个session中共享。
数据库同一性
foo.getId().equals( bar.getId() )
JVM同一性
foo==bar
在同一个session中,hibernate保证两种同一性是一致的,虽然不推荐,在同一个session中可以使用==比较对象
乐观锁自动版本或者时间戳检查并发访问
在session外,使用==会有问题,比如导致可以放置两个detached对象到一个set里,但是实际是代表的同一行。所以需要覆盖hashcode和equals方法,但是不要使用数据库标示符来实现,因为transient的对象在持久化后会改变数据库标示符,这破坏了set的contract
关于数据库的隔离级别和实现,可参考
http://baike.baidu.com/view/2943500.htm
关于丢失更新,网上有些解释不正确,丢失更新应该是第二个事务失败,而把第一个事务的更新也回滚了。通过排他写锁实现读取未提交隔离级别,可防止。
转载于:https://my.oschina.net/heatonn1/blog/167480
Hibernate 事务总结相关推荐
- dbunit java_Java – 让DbUnit使用Hibernate事务
我在尝试将Hibernate事务中的更改推送到数据库以使DbUnit在我的测试用例中正常工作时遇到问题.似乎DbUnit没有看到Hibernate所做的更改,因为它们还没有在事务结束时提交--而且我不 ...
- 【大话Hibernate】hibernate事务管理
事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰. 数据库向用户提供保存当前程序状态的方法,叫事 ...
- Spring中配置Hibernate事务的四种方式
2019独角兽企业重金招聘Python工程师标准>>> 为了保证数据的一致性,在编程的时候往往需要引入事务这个概念.事务有4个特性:原子性.一致性.隔离性.持久性. 事务的种类有两种 ...
- Spring4.x(9)--Spring的Hibernate事务-XML
Spring的Hibernate事务-XML 一.拷贝必要的jar包到工程的lib目录 二.创建spring的配置文件并导入约束 <?xml version="1.0" en ...
- Hibernate事务
Hibernate事务控制 在实际生产中,每个业务逻辑都是由一系列对数据库访问完成的,这一系列的数据访问可能包括删除一些数据,然后再插入一些数据, 这里的删除和插入的动作不可分割,要么全部执行 ...
- Spring对Hibernate事务管理
http://www.cnblogs.com/m-xy/archive/2013/05/14/3077627.html(挺好的) 还有一种用parent的配置方式,parent配置到哪个层面,事务就控 ...
- Hibernate事务管理-HibernateTransactionManager-对hibernate session的管理
由于对SSH还停留在比较初级的应用水平上,今天在遇到一个疑惑时折腾了很久,具体问题是这样的, 有这么一个测试方法, 1 public static void test1() { 2 Applicati ...
- spring 中 Hibernate 事务和JDBC事务嵌套问题
http://www.iteye.com/topic/11063?page=2 ---mixed ORM and JDBC usage is a feature of Spring DAO 这是Rod ...
- Hibernate事务管理
事务只是一个工作单位(单元). 在这种情况下,如果一个步骤失败,则整个事务失败(称为原子性). ACID属性(原子性,一致性,隔离性和持久性)可以描述事务. Hibernate中的事务接口 在hibe ...
最新文章
- pytorch环境下“No module named SimpleITK”的解决办法
- SqlServer2000日志文件过大问题处理
- export default (imported as router) was not found_HTC 5G Hub 流动Router 评测分享
- 关于java包_关于Java包
- C++:String的写时拷贝
- PHP 基础 自动类型转换之比较运算符
- hdu5279 YJC plays Minecraft 【分治NTT】
- 基于消息队列的日志组件
- LeetCode 995. K 连续位的最小翻转次数(差分思想)
- 娄底八中的初中计算机考试,众人同心勤耕耘 敢叫日月换新天
- GIS中的基本概念收集
- 甘肃刘家峡赤壁“结”出多彩冰瀑
- 即时聊天工具国外盛行,国内发展缓慢
- 美国军方称密切关注量子加密,法国国防部重金投资量子技术
- Python处理txt文件
- 学生评语管理系统软件测试,学校教师老师综合评价评分系统软件
- 金山文字 职称计算机,计算机职称考试金山文字2005考试大纲
- 2021年软件测试工具总结——接口测试工具
- win10系统从旧固态迁移到新固态,win10系统迁移到固态硬盘ssd
- 高中数学必考知识点:二元一次不等式(组)及简单的线性规划问题