2017-04-01 53 views

回答

0

事實上,如果你不小心,它確實會產生內存問題。
但你會在之前達到另一個限制:性能...

所有Hibernate在事務內部加載的內容都存儲在上下文中。每次嘗試加載對象時,如果它尚不存在,則首先檢查上下文。在上下文中存儲大量實體會帶來巨大的性能下降(由於複雜的原因,我在這裏不會詳述)。

如果Hibernate沒有這樣做,它會返回同一個實體的許多實例,並帶有重複的數據。如果您更新了它們,它將無法知道要將哪些數據保存到數據庫中。

拇指規則:如果您不再需要它們,儘可能快地保持您的交易空間不變,或者evict()上下文中的實體儘快通過。


PS:這不叫「緩存」;該會話是正確執行其ORM任務所必需的上下文。有二級緩存庫,但它是完全不同的事情。

+0

謝謝紀堯姆。其實我指的是一級緩存。現在可以請你解釋我的緩存從db返回對象。 – Rohit

+0

是的,這個「第一級緩存」被稱爲「上下文」以避免與簡單緩存混淆。上下文做了很多事情。當你說「緩存從數據庫返回對象」時,你想知道什麼?我不明白這個問題。 –