数据库事务与并发【转】
//: 使用该元素也可以实现版本控制?
<timestamp name=”lastUpdateTime” column=” LAST_UPDATED_TIME” />?
对游离对象进行版本检查?
Session session1 = ....;?
trans1 = session1.beginTransaction();?
Account a = (Account)session1.get(Account.class, new Long(1));?
trans1.commit();?
session1.close();?
a.setBalance(a.getBalance()-100);?
Session session2 = ...;?
trans2 = session2.beginTransaction();?
session2.lock(a, LockMode.READ);?
trans2.commit();?
session2.close();?
lock() 方法和update()方法之间的区别?
lock()方法在LockMode.READ模式下,立即进行版本控制。而update()方法不会立即执行版本检查,只有当Session清理缓存时,真正执行update时才进行版本检查?
lock()在默认的LockMode中不会执行update语句。而update()会计划执行一个update语句,如果数据库中没对应的记录那么会抛出异常。?
实现乐观锁的其他方式?
<class optimistic-lock="all" dynamic-update="true">?
//: optimistic-lock=all/dirty 时必须设置dynamic-update为true