hibernate事务处理和锁

事务处理:
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字段中。

61893.html

topquan 2006-08-05 01:18 发表评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值