2013-03-06 62 views
1

我們在Hibernate中有saveOrUpdate(Object)函數,而我們使用Session更容易,因爲我們不必檢查是否執行保存或更新。但insert(Object)update(Object)函數僅用於無狀態會話,我需要使用無狀態會話,因爲我帶着數十萬條記錄進行操作,並且休眠正在消耗內存。有沒有辦法在無狀態會話中複製saveOrUpdate(Object)功能。或者無論如何,通過使用HQL查詢,而不是通過休眠來使用對象。Hql的查詢在休眠中類似於SaveOrUpdate

回答

0

按照StatelessSession的JavaDoc

一個無狀態session不實現第一級cache,也不 與任何二級緩存交互,也不實施 事務後寫或自動髒檢查,操作也不會級聯到關聯的實例。 無狀態會話忽略集合。通過無狀態會話執行的操作 繞過了Hibernate的事件模型和攔截器。無狀態會話 對數據的抗鋸齒效果,由於缺乏一個 第一級緩存

但不維護一級緩存,因此不知道對象的當前狀態(瞬態,持久性,分離性或移除性),因此它不能作出有意識的決定。您可以使用HQL查詢以查找數據庫中是否存在相同的記錄,並分別調用insert()update()的方法。但這是一個代價高昂的問題。

如果有記錄被更新或插入,最好使用基本的JDBC而不是休眠。這將解決你的記憶問題。

+0

感謝您的答覆..我試圖找出一種方法來通過休眠而不影響內存。而我通過使用無狀態會話嘗試,然後我可以控制內存使用情況。 – Saif 2013-03-08 05:22:11