我使用hibernate標準API來檢索數據。這些數據只會由用戶查看。用戶不能修改這些數據。那麼,使用readOnly有沒有什麼好處?你可以建議專業&缺點?還有其他的方法需要考慮嗎?在休眠標準中使用readOnly是否有任何性能優勢?
回答
休眠跟蹤的會話中加載找到的修改,當你刷新會議堅持所有更改的所有對象。如果將實體加載爲只讀,則指示Hibernate不要跟蹤該實體以進行更改。這樣,你會得到一些性能增加。
但是,該對象將保留在會話緩存中。如果緩存過大,則會成爲一個嚴重的問題,並且可能會導致內存不足。如果你讀了很多東西,那麼驅逐它們是件好事。
如果Hibernate的性能確實是一個問題,那麼切換到純JDBC是更好的選擇。我從不使用Hibernate來加載大量數據(例如報表或批處理)。爲了顯示列表,我只加載我需要的字段,而不是整個實體(如果你只讀取選擇的字段,而不是整個實體,它們總是隻讀的)。
所以答案是,是,它會讓Hibernate更快一些,但還有其他方法可以獲得更高的性能。
我正在使用帶有休眠功能的數據庫視圖來顯示帶有必需字段的列表。只讀對象是否總是停留在緩存中?沒有被驅逐嗎? – nayakam
使用只讀實體更像是一個意圖的表達。通過使用只讀hibernate不會檢查實體是否已經改變,即使它已經改變。這與被標記爲不可變的實體不同,因爲這些實體不受變化的影響。如果Hibernate檢測到一個不可變的實體對象的屬性發生了變化,但是隻讀實體沒有發生變化,Hibernate將會出錯。
因此,使一個實體只讀通知休眠,你不希望更改持久。這也可能不適用於相關收藏。
除非您有特殊要求或做特別昂貴的骯髒檢查,否則性能增益最低。
所以它不是關於性能。這是一種安全措施,可以保護數據庫免遭意外更改。
例如,您有一個描述地理位置的位置實體。現在你有一個人併爲其分配一個位置。當使用人員協會加載位置時,即使您的同事(或您自己)意外更改了位置,您也可以使位置只讀。更改將不會被存儲,但對Person實體的更改仍然存在。 (可能最好將位置標記爲不可變但存在這些罕見情況,這是不夠的。)
- 1. 使用'unreachable!`vs`panic!`是否有任何性能優勢?
- 2. .NET中的「鏈接」語句是否有任何性能優勢?
- 3. PUT和DELETE HTTP方法是否有任何性能優勢?
- 4. JavaScript:停止事件傳播是否有任何性能優勢?
- 5. 在數組上迭代使用Arrays.stream()是否有任何性能優勢?
- 6. Silverlight是否比JavaScript有性能優勢?
- 7. 是否有任何優勢有子域
- 8. 休眠標準
- 9. 標準休眠
- 10. 休眠標準
- 11. 休眠標準
- 12. 休眠標準
- 13. 休眠標準
- 14. 是否有任何標準手勢可用於kinect?
- 15. 私人會員是否添加任何性能優勢?
- 16. 休眠標準API
- 17. 或標準 - 休眠
- 18. 通過LocationManager使用FusedLocationProviderApi是否有任何優勢?
- 19. 是否有任何缺點使用休眠query.settimeout()方法
- 20. 休眠 - 在標準限制
- 21. SQL'case when'在休眠標準
- 22. 泛型方法vs非泛型方法 - 是否有任何性能優勢?
- 23. 在此函數中使用引用參數是否有任何優勢?
- 24. 是否有休眠的標準涵蓋任何標準包含名單的條件
- 25. 休眠標準排他性限制
- 26. 非映射屬性的休眠標準
- 27. VB6 - 在VB6中使用固定寬度的字符串是否有任何性能優勢?
- 28. 排序CSS屬性是否有性能優勢?
- 29. 在本地C++中使用webservice是否有任何標準?
- 30. 休眠 - 加入使用標準
您是否在談論分離或受管實例?它是一個分層架構的Web應用程序嗎?當你說用戶是指你的開發人員將使用你的API來訪問數據或你的應用程序的普通非技術用戶(與視圖層交互)? – Thihara