本系列部落格彙總在這裡:Hibernate 彙總
并發控制
- 一、悲觀鎖
- 二、樂觀鎖
源碼工程檔案為:hibernate4.3_12

一、悲觀鎖
public void updateStock()
{
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
try
{
// 使用悲觀鎖查詢,如果一個請求在查詢時,另一個請求被阻塞在外
Item item = (Item) session.load(Item.class, 1, LockOptions.UPGRADE);
item.setStock(item.getStock() - 2);
tx.commit();
} catch (Exception e)
{
e.printStackTrace();
tx.rollback();
} finally
{
HibernateUtils.closeResource(session);
}
}
二、樂觀鎖
public void optLock()
{
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
try
{
// 樂觀鎖
Item item = (Item) session.load(Item.class, 1);
item.setStock(item.getStock() - 2);
tx.commit();
} catch (Exception e)
{
e.printStackTrace();
tx.rollback();
} finally
{
HibernateUtils.closeResource(session);
}
}
Select * from t_item where item_id = 1001;
1001 iphone 100 1
Update t_item set t.stock = 100 – 2, t.version = t.version+ 1 where t.item_id = 1001 and t.version = 1