2
有誰知道爲了獲得更快的搜索查詢,哪個是設置OneToMany和ManyToOne關係的Hibernate關係的最佳方法?我應該離開默認關係,使用OneToMany(mappedBy = ...)。或者是否有其他方式可用於獲得最佳效果。在休眠狀態下設置OneToMany ManyToOne關係的最佳方法
我得到了一個實體樹,並希望儘可能快地加載任何給定節點下的所有關係。
有誰知道爲了獲得更快的搜索查詢,哪個是設置OneToMany和ManyToOne關係的Hibernate關係的最佳方法?我應該離開默認關係,使用OneToMany(mappedBy = ...)。或者是否有其他方式可用於獲得最佳效果。在休眠狀態下設置OneToMany ManyToOne關係的最佳方法
我得到了一個實體樹,並希望儘可能快地加載任何給定節點下的所有關係。
我不能告訴你是否在談論搜索或加載對象圖。
許多事情都會提高加載對象圖的性能。
1)數據庫表上的索引。
2)調整提取策略;避免n + 1選擇。
3)二級緩存
索引應該總是對你有所幫助,而且也非常重要。調整提取策略應該會對你有所幫助,而二級緩存可能會對你有所幫助。對於第二和第三,你將不得不收集一些指標來確定最佳路徑。
當你說你
要加載任何給定節點以下的所有關係儘可能快。
只是要小心,不要一次加載太多的數據。有時最好編寫優化的hql來加載對象圖的摘要以呈現給用戶,然後當用戶選擇單個項時加載完整對象。
嗯..反之亦然:你應該避免非n + 1選擇。如果您使用連接,則不會觸及緩存,如果您閱讀的次數多於編寫,則會顯着降低性能。一般規則:除非您沒有通常的要求,否則使用lazy = true&fetch = select。 – 2012-04-23 12:16:17
你是什麼意思「反之亦然」。 – hvgotcodes 2012-04-23 14:31:12
你建議避免n + 1選擇並使用連接。反之亦然意味着你實際上應該避免在一般情況下的連接,並且使用選擇或者子選擇來利用二級緩存。 – 2012-04-23 14:44:40