我一直在使用Hibernate來存儲一個@JoinColumn使用@OneToMany一段時間的父子關係,它工作得很好。大塊數據存儲:休眠@OneToMany關係
但現在我已經達到了一個點,其中的對象的總大小太大,以適應內存。 (例如現在有300萬兒童記錄)。記錄全部存儲在一個文件中,然後在休眠之前先解析成Java對象。
我想「大塊」或「批量」記錄,以便我只需要將其中一小部分一次讀入內存。我的方法就像「加載10,000個子對象的集合,堅持數據庫(在父對象上調用'update'),清空子集合以釋放RAM,重複」。
我想這就像工作:
Iteration 1: Chunk1 (records 1-10,000) stored
Iteration 2: Chunk2 (records 10,001-20,000) stored
Iteration 3: Chunk3 (records 20,001-30,000) stored
etc
這裏就是我在遇到麻煩。我保存的集合隨每次迭代而改變,這會導致休眠在保存新的子節點之前刪除所有的舊的子節點。我沒有把所有的塊都保存起來,而是用
Iteration 1: Chunk1 stored
Iteration 2: Chunk1 objects deleted, Chunk 2 stored
Iteration 3: Chunk2 objects deleted, Chunk 3 stored
etc
所以最後只保存了我的最後一個塊。
有什麼方法可以改變這種行爲嗎?我已經閱讀了關於JDBC批處理的內容,但這不是我想要的。我也嘗試單獨存儲每個孩子,而不是通過「更新」到父母,但是當我這樣做時,孩子記錄被持久化而沒有指向父母的指針。
更新:
感謝您的快速和出色的響應。這種關係不是雙向的 - 我會盡力讓它變成這樣。我有遺留的代碼,不會與模式更改合作,所以我有點受到限制。
謝謝
謝謝!會試試這個。 – OneSolitaryNoob