我的項目有鎖定hibernate 3.3.2.GA版本的行機制,我們正在計劃升級到休眠5.我打算讓這個查詢工作在更舊的休眠和更新的版本以及。休眠LockOptions超時
這是Hibernate 3.3.2.GA
如果該行被鎖定在會議上已經這個查詢將鎖定該行現有的查詢,將等到超時,並拋出超時如果超過。
Query query = session.getNamedQuery("select aps from WritableSchool aps where aps.schoolCd = :schoolCd");
query.setParameter("schoolCd", schoolCd);
query.setTimeout(2); // seconds
query.setLockMode("aps", LockMode.UPGRADE);
List<WritableSchool> schools = query.list();
當我們升級到休眠五分之四的版本,超時工作不就永遠等待鎖獲取如果表被鎖定在會話了。
在休眠4相同的代碼我想更換鎖和超時這樣 query.setLockOptions(new LockOptions(LockMode.UPGRADE).setTimeOut(100));
它仍然沒能得到超時工作。
我嘗試了另一種方式。
session.buildLockRequest(LockOptions.NONE).setLockMode(LockMode.UPGRADE).setTimeOut(2000).lock(school);
據執行選擇。對於更新,但沒有履行的時間了,但是我實現。
目前我唯一的解決方案是重寫hibernate oracle dialect,並將shouldUseFollowOnLocking()
設置爲false,同時獲得鎖定和榮譽超時。
我想知道爲什麼超時在休眠鎖定選項不符合。如果任何人有任何想法鎖定和超時休眠,請幫助,謝謝。