我正在尋找一種方法來保存並立即鎖定數據庫上的實體,以避免其他線程在線程創建者結束之前訪問該實體。
我使用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. 將其他實體保存在Hibernate中
- 3. 確保在Hibernate/HSQLDB中使用併發鎖定進行更新?
- 4. 存儲實體與Hibernate
- 5. 使用實體框架保存實體
- 6. 無法使用Hibernate將實體保存到數據庫中
- 7. Spring Boot - OneToMany並保存實體
- 8. 實體框架4保存並取消
- 9. Spring Boot Hibernate Ehcache實體緩存實現
- 10. 樂觀鎖定 - Hibernate的併發問題
- 11. Hibernate和交易,並鎖定表
- 12. 使用JPARepository保存實體
- 13. 鎖定在實體框架
- 14. 鎖定實體框架
- 15. 使用固定併發模式保存之前鎖定
- 16. 實體框架的實體並不自動填充上保存
- 17. CrudRepository和Hibernate:保存(名單<S>)與保存(實體)的交易
- 18. 如何使用Objectify保存實體並保留一些值undeoutch
- 19. 編輯現有實體並保存不保存
- 20. EJB3Unit保存功能並不能真正保存我的實體
- 21. Hibernate在不插入父項的情況下保存子實體
- 22. HIbernate覆蓋數據時持久/保存實體
- 23. 保存/更新具有多對多關係的Hibernate實體
- 24. 保存Hibernate JPA子實體的正確方法是什麼
- 25. Java Hibernate保存實體在Sql Server 2008上失敗
- 26. Hibernate實體攔截器觸發但設置值不保存
- 27. 在保存實體時出現Spring/Hibernate編碼錯誤
- 28. Hibernate不會保存實體與多對一關係
- 29. 沒有其他方法可以在Hibernate中保存實體嗎?
- 30. Hibernate是否允許加載/保存鏈接的實體?
謝謝您的回答。這樣整個表將被鎖定。我只想鎖定新的實體。 – nuno
隔離級別越高,其性能越低。 –