Hibernate笔记之事务

事务的概念:事务值一个单元的工作,这些工作要么都完成,要么都不完成

事务的ACID特性:原子性,一致性,隔离性,持久性

简单理解为:

1.要么都完成,要么都不完成

2.所有数据具有一致状态

3.一个事务不能看着另外一个事务正在修改数据

4.写到数据库


hibernate将底层的JDBCTransaction和JTATransaction进行了封装,再在外面套上Transaction和Session外壳,其实都是委托底层的JDBC或JTA


默认使用的是JDBC

Transaction tran = session.beginTransaction();

...

tran.commit(); / tran.rollback();


JTA

场合:

1.一个查询调用几个数据库,需要一个分布式事务

2.跨session的长事务

使用:

1.hibernate.properties文件中

hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory

或hibernate.cfg.xml文件中

<session-factory>

<property name="hibernate.transaction.factory_class">

org.hibernate.transaction.JTATransactionFactory

</property>

</session-factory>

2.

应用接口:UserTransaction,TransactionManager,Transaction

javax.transaction.UserTransaction tx = null;


tx = new initialContext().lookup(” javax.transaction.UserTransaction ”) ;


tx.begin();

Session s1 = sf.openSession();
 ……


s1.flush(); 
 s1.close();


Session s2 = sf.openSession();


……

s2.flush(); 
 s2.close();


tx.commit();


谈到事务必不可少的就是并发控制!!!

4个并发问题:

1.丢失更新(一起读,各自改)

A,B都正在读一份文档,但A修改了文档,B也想修改文档,那么A修改的将丢失,

所以B想修改必须重新载入

2.脏读(一读,一改)

一个事务选择了另外一个事务正在更新的行时,

所以修改数据前,保证任何人不能读取更改的数据

3.非重复读(读读)

作者完全完成编辑后,编辑人员才可以读取文档

4.幻读(一改,一读)

当对某行inert delete时,该行属于某个事务正在读取的行


缓解并发问题:

一:hibernate隔离级别

<session-factory>

<property name="hibernate.connection.isolaction"> 1 </property>

</session-factory>

防止

1 丢失跟新

2 脏读+丢失跟新

3 不可重复读+2

4 1+2+3


二:设置几个小锁

LockMode.NONE 默认       会检查缓存

LockMode.READ   直接select数据库,会检查版本

LockMode.UPGRADE    同上,但是数据库支持悲观锁就用select for update

LockMode.UPGRADE_NOWAIT    同上,但是数据库支持悲观锁就用select for update nowait

LockMode.WRITE     自动使用

LockMode.FORCE    对使用了version的记录强制增加version值

使用:

行:session.load(..)

对象:session.load();   session.lock(对象,锁)

query:session.createQuery().setLockMode().list();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值