我正在尋找一種方法來保存並立即鎖定數據庫上的實體,以避免其他線程在線程創建者結束之前訪問該實體。
我使用Hibernate 4.3.11和Spring 4.2.5。
在此先感謝。用Hibernate保存並鎖定實體
0
A
回答
0
一種可能的方法應該是將事務級別提高爲可序列化。 該級別確保數據被鎖定,直到未在其他事務中使用。
0
雖然鎖定模式 - LockMode.WRITE - 但隨着文檔狀態
當對象被更新或插入得到的寫鎖。這 鎖定模式僅用於內部使用,不是一個有效的模式,負載() 或鎖()(如果指定寫的是這兩個拋出異常)..
如果它只是你只插入行,那麼你不能專門鎖定使用hibernate的數據庫行,因爲行尚未提交。 當你的代碼(休眠或沒有)在數據庫中插入行並且尚未提交時 - 有事務鎖被持有,在事務提交時被釋放。鎖的性質和內部發生的方式是數據庫特定的。但是,如果你有興趣在鎖定一些行(已經存在),那麼你可以 使用
session.get(TestEntity.class, 1, LockMode.PESSIMISTIC_WRITE);
這將持有悲觀鎖查詢到的數據(通常通過發出SELECT .... FOR UPDATE)的持續時間的事務,並且沒有其他線程/事務可以修改已經進行了鎖定的數據。
0
Hibernate提供了樂觀和悲觀兩種類型的鎖。它直線前進。
1)樂觀用途版本在那裏它會在數據庫中的版本列,並檢查它更新之前,否則拋出悲觀異常
2)就像一個數據庫中的一些事情處理上該行的鎖定並且在操作完成後會得到釋放,有幾個選項都存在這同樣是怎麼樣,你想像這樣讀鎖,寫鎖
https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html
相關問題
- 1. 優化Hibernate實體保存?
- 2. 使用實體框架保存實體
- 3. 無法使用Hibernate將實體保存到數據庫中
- 4. Spring Boot - OneToMany並保存實體
- 5. 實體框架4保存並取消
- 6. Hibernate和交易,並鎖定表
- 7. 鎖定實體框架
- 8. 實體框架的實體並不自動填充上保存
- 9. CrudRepository和Hibernate:保存(名單<S>)與保存(實體)的交易
- 10. EJB3Unit保存功能並不能真正保存我的實體
- 11. 保存Hibernate JPA子實體的正確方法是什麼
- 12. Java Hibernate保存實體在Sql Server 2008上失敗
- 13. 在保存實體時出現Spring/Hibernate編碼錯誤
- 14. 保存/更新具有多對多關係的Hibernate實體
- 15. HIbernate覆蓋數據時持久/保存實體
- 16. Hibernate在不插入父項的情況下保存子實體
- 17. Hibernate實體攔截器觸發但設置值不保存
- 18. 沒有其他方法可以在Hibernate中保存實體嗎?
- 19. 攔截並重定向實體保存從內的SaveChanges
- 20. Java - 合併Hibernate bean /實體 - saveOrUpdate前
- 21. Azure表存儲 - 用於保存集合的自定義表實體保存
- 22. Hibernate保存方法和併發
- 23. 使用Spring Data/JPA/Hibernate與分離實體測試保存調用
- 24. 在hibernate中使用合併後刷新實體實例?
- 25. 在BigTable數據存儲中,關於併發性,如何「鎖定」實體?
- 26. 使用休眠保存實體與引用的依賴實體
- 27. 保存LDAP查詢鎖定特定OU
- 28. 保存數據庫實體
- 29. 實體框架InvalidOperationException保存
- 30. 保存,進度,DDD,實體
謝謝您的回答。這樣整個表將被鎖定。我只想鎖定新的實體。 – nuno
隔離級別越高,其性能越低。 –