在hibernate.cfg.xml配置程序里的默認(rèn)事務(wù)并發(fā)處理級別:
<property name="connection.isolation">2</property>

為了考慮并發(fā)的效率,推薦使用級別2(TRANSACTION_READ_UNCOMMITTED),但是存在重復(fù)讀問題(non-reapeatable reads)和幻讀(phantom reads)問題。
在Hibernate中為了解決重復(fù)讀問題(non-reapeatable reads)問題,可以使用悲觀鎖、樂觀鎖兩種方法來解決。
用悲觀鎖解決 repeatable read 的問題(依賴于數(shù)據(jù)庫的鎖)
LOCKMODE.UPGRADE

悲觀鎖
使用數(shù)據(jù)庫的鎖,如:
select * from test for update(Oracle)
/////////////////////////////////////
 select
        account0_.id as id0_0_,
        account0_.balance as balance0_0_
    from
        Account account0_ with (updlock,
        rowlock)
    where
        account0_.id=?
(SQL SERVER)

樂觀鎖
程序員自己加字段,來記錄版本信息,當(dāng)事務(wù)1查詢數(shù)據(jù)后,事務(wù)2對數(shù)據(jù)產(chǎn)生變化時,版本號自動加1,當(dāng)事務(wù)1提交事務(wù)時會檢測版本號是否一致,如果不一致則報錯。效率要比悲觀鎖高。