hibernate事务处理和锁
来源:互联网 发布:淘宝店铺广告语小吃 编辑:程序博客网 时间:2024/05/21 09:40
Hibernate本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务的管理与调度。
基于JDBC的事务:
无疑是最简单的实现方式,
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
tx.commit();
基于JTA的事务管理:
hibernate默认采用JDBC Transacion。可以通过配置文件指定采用JTA作为事务管理实现。
<hibernate-configuration>
<session-factory>
......
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory
</property>
</session-factory>
</hibernate-configuration>
锁(locking)
支持两种锁:悲观锁和乐观锁
悲观锁(Pessimistic locking):
数据库的实现
select * from account where name='yyy' for update
通过for update子句,这条语句锁定所有符合条件的记录,在本次事务提交之前,外界无法修改这些记录。
hibernate的实现,也是基于数据库的锁机制实现:
加锁一般通过以下方法实现:
Criteria.setLockMode
Query.setLockMode
Session.lock
hibernate的加锁模式:
LockMode.NONE:无锁机制
LockMode.WRITE:hibernate在Insert和update时,会自动获取
LockMode.READ:hibernate在读取记录的时候,会自动获取
以上3种,由hibernate内部使用。
LockMode.UPGRADE:利用数据库的for update子句加锁
LockMode.UPGRADE_NOWAIT:oracle特定实现,利用oracle的for update nowait子句实现加锁。
乐观锁(Optimistic locking):
hibernate在其数据访问引擎中内置了乐观锁实现。可以通过class描述符的optimistic-lock属性结合version描述符指定。
<hibernate-mapping>
<class
name="org.hibernate.sample.TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true"
optimistic-lock="version"
>
<id>......
</id>
<version
column="version"
name="version"
type="java.lang.Integer"
/>
</class>
</hibernate-mapping>
注意,version节点要在ID节点之后。
这里,声明了一个version属性,用于存放用户的版本信息,保存在T_User表的version字段中。
- hibernate事务处理和锁
- hibernate事务处理和锁
- Hibernate的事务处理和二级缓存
- Hibernate事务处理的悲观锁和乐观锁
- Hibernate之事务处理(悲观锁和乐观锁)
- Hibernate 事务处理
- hibernate事务处理
- hibernate事务处理
- hibernate事务处理
- Hibernate事务处理
- Hibernate的事务处理方式和并发控制
- Hibernate 事务处理和spring中配置事务
- Hibernate 事务处理和spring中配置事务
- Hibernate 事务处理和spring中配置事务
- MySQL事务处理和锁机制
- Spring+Hibernate延迟和声明式事务处理最终解决方案
- Spring+Hibernate延迟和声明式事务处理最终解决方案
- Hibernate的事务处理机制和flush方法的用法
- SQL Server 和 .net 对时间的大小范围定义
- 如何发现更深层次的bug?
- 浅谈Java中的通信机制及与C/C++ API的集成
- Hibernate分页查询原理解读
- 测试分析心得体会
- hibernate事务处理和锁
- 关于乱码问题的解决方法
- 黑盒测试方法揭密
- 系统测试的方法
- 等价类划分法的个人经验
- 404 错误的动态处理。
- 从模板看微软实用主义测试
- 浅谈如何有效制度测试计划?
- 通常书写Test Case时需要考虑的检查点