我想通過1使用Hibernate來增加在數據庫表中的字段。休眠:增加一個整型字段
我可以通過簡單地加載一個對象,增加值和更新但對象如果另一個線程來臨時,在負載和更新則該值將損壞之間更新的領域做到這一點。
所以不是我呼籲直接對數據庫進行更新:
Query updateHits = createQuery(
"UPDATE Job SET hitCount = hitCount + 1 WHERE id = :jobId");
updateHits.setInteger("jobId", job.getId());
updateHits.executeUpdate();
但我的理解是,這繞過數據庫中的樂觀鎖定和我目前SQL服務器遇到問題死鎖,我相信這是罪魁禍首。
有沒有辦法來增加一個字段,而不直接調用和更新,同時保持數據的完整性?
可能想檢查您的鎖是如何創建的。如果你正在爲該更新獲取表鎖,則會出現問題。如果你得到一個行鎖我不明白怎麼回事造成死鎖。 – BlackICE 2011-03-25 11:51:10
我實際上設法解決死鎖問題,只是確保此更新是在事務內運行的最後一條語句。不過,我仍然很想知道更好的解決方案。 – 3urdoch 2011-03-25 12:17:52
您的「逐查詢增量」解決方案比處理悲觀鎖定要好十倍,尤其是在您正在處理多線程和長時間運行的事務時 – kommradHomer 2014-10-28 16:10:25