我們在Hibernate中有saveOrUpdate(Object)
函數,而我們使用Session更容易,因爲我們不必檢查是否執行保存或更新。但insert(Object)
和update(Object)
函數僅用於無狀態會話,我需要使用無狀態會話,因爲我帶着數十萬條記錄進行操作,並且休眠正在消耗內存。有沒有辦法在無狀態會話中複製saveOrUpdate(Object)
功能。或者無論如何,通過使用HQL查詢,而不是通過休眠來使用對象。Hql的查詢在休眠中類似於SaveOrUpdate
1
A
回答
0
按照StatelessSession的JavaDoc
一個無狀態session不實現第一級cache,也不 與任何二級緩存交互,也不實施 事務後寫或自動髒檢查,操作也不會級聯到關聯的實例。 無狀態會話忽略集合。通過無狀態會話執行的操作 繞過了Hibernate的事件模型和攔截器。無狀態會話 對數據的抗鋸齒效果,由於缺乏一個 第一級緩存
但不維護一級緩存,因此不知道對象的當前狀態(瞬態,持久性,分離性或移除性),因此它不能作出有意識的決定。您可以使用HQL查詢以查找數據庫中是否存在相同的記錄,並分別調用insert()
或update()
的方法。但這是一個代價高昂的問題。
如果有記錄被更新或插入,最好使用基本的JDBC而不是休眠。這將解決你的記憶問題。
相關問題
- 1. 休眠HQL查詢
- 2. 在HQL(休眠)中轉換SQL查詢
- 3. 休眠saveOrUpdate行爲
- 4. 有條件saveOrUpdate在休眠
- 5. 休眠第一個hql查詢...錯誤
- 6. HQL:使用ManyToMany進行休眠查詢
- 7. 休眠 - HQL幫助優化查詢
- 8. 將休眠linq查詢轉換爲HQL
- 9. 休眠HQL查詢拋出異常
- 10. 休眠HQL getMaxVersion
- 11. GROUP_CONCAT休眠HQL
- 12. 休眠(HQL)
- 13. 休眠掛起上saveOrUpdate
- 14. 休眠saveOrUpdate大數據
- 15. 休眠saveorUpdate方法問題
- 16. 休眠SaveOrUpdate:如何使用
- 17. 休眠saveOrUpdate不更新
- 18. 休眠SaveOrUpdate複合鍵
- 19. 休眠:轉換MySQL查詢DATEDIF到HQL查詢
- 20. 將HQL(休眠查詢語言)轉換爲oracle查詢
- 21. hql - 如何在休眠中選擇條件查詢
- 22. 如何用Joda時間在HQL(休眠)中查詢日期?
- 23. 休眠 - 在查詢
- 24. 休眠HQL和setMaxResults
- 25. 休眠:使用HQL
- 26. 加入休眠HQL
- 27. 休眠4.1.11 hql刪除查詢與列表中的位置
- 28. 日期列與休眠hql查詢中的問題
- 29. 提取* HQL *在休眠
- 30. 問題像在休眠hql
感謝您的答覆..我試圖找出一種方法來通過休眠而不影響內存。而我通過使用無狀態會話嘗試,然後我可以控制內存使用情況。 – Saif 2013-03-08 05:22:11