對不起,如果有人已經回答了這個具體問題,但我還沒有找到我的問題的答案,所以在這裏。休眠Session.flush()效率問題
我正在研究一個應用程序(不能,因爲它是一個工作,所以我對此感到抱歉),它使用DAO,Hibernate和POJO以及所有這些東西來進行通信和寫入數據庫。這適用於應用程序,假設我在調用Session.flush()時沒有大量數據來檢查。話雖如此,有一個頁面,用戶可以添加任意數量的項目到一個產品,並且有一個特定的情況,其中有25個項目的內容。每個項目有大約8個字段,全部存儲在數據庫中。當我調用flush時,它會將所有內容保存到數據庫中,但需要FOREVER才能完成。三條線我打電話是:
merge(myObject);
Session.flush();
Session.refresh(myObject);
我已經嘗試了很多事情來解決這個問題,和一些不同的解決方案,以便回來,說:「不要用流感略有相似之處()」 ISN不同的組合因爲saveOrUpdate()和其他休眠會話似乎不起作用。我能想到的唯一解決方案是廢棄整個項目(我們得到的代碼是遺傳的,編寫得很少),或者告訴用戶社區吸收它。
這是我從Hibernate API的理解,如果你想寫數據到數據庫,它會對每個項目運行一次檢查,如果有差異,它會創建一個更新查詢隊列,然後運行查詢。看起來這些數據每次都在更新,因爲即使其他值不變,我數據庫中的「DATE_CREATED」列也是不同的。
我想知道的是,如果有另一種方法來阻止如此大量的數據提交或從「check」hibernate中排除特定列的方式,那麼我不必提交所有25個項目,如果我只改變了1?
在此先感謝。
邁克
25並不是真的那麼多,除非物體是巨大的。無論如何,每個項目是在自己的會話中處理的,還是都在沖洗前被添加到會話中? – hvgotcodes
好吧,原來它更像是60+對象哈哈。我不記得這麼多,但現在有多少。儘管每個項目都被添加到同一個會話中,但最後我會調用flush。我試着將POJO中的dateCreated字段設置爲updatable = false,作爲確保檢查不會發生在該字段上的問題,但這不起作用。有什麼想法? –
你需要弄清楚什麼是花時間。是對象操作,數據庫插入,無論什麼...... – hvgotcodes