2012-04-23 76 views
2

有誰知道爲了獲得更快的搜索查詢,哪個是設置OneToMany和ManyToOne關係的Hibernate關係的最佳方法?我應該離開默認關係,使用OneToMany(mappedBy = ...)。或者是否有其他方式可用於獲得最佳效果。在休眠狀態下設置OneToMany ManyToOne關係的最佳方法

我得到了一個實體樹,並希望儘可能快地加載任何給定節點下的所有關係。

回答

-2

我不能告訴你是否在談論搜索或加載對象圖。

許多事情都會提高加載對象圖的性能。

1)數據庫表上的索引。
2)調整提取策略;避免n + 1選擇。
3)二級緩存

索引應該總是對你有所幫助,而且也非常重要。調整提取策略應該會對你有所幫助,而二級緩存可能會對你有所幫助。對於第二和第三,你將不得不收集一些指標來確定最佳路徑。

當你說你

要加載任何給定節點以下的所有關係儘可能快。

只是要小心,不要一次加載太多的數據。有時最好編寫優化的hql來加載對象圖的摘要以呈現給用戶,然後當用戶選擇單個項時加載完整對象。

+0

嗯..反之亦然:你應該避免非n + 1選擇。如果您使用連接,則不會觸及緩存,如果您閱讀的次數多於編寫,則會顯着降低性能。一般規則:除非您沒有通常的要求,否則使用lazy = true&fetch = select。 – 2012-04-23 12:16:17

+0

你是什麼意思「反之亦然」。 – hvgotcodes 2012-04-23 14:31:12

+0

你建議避免n + 1選擇並使用連接。反之亦然意味着你實際上應該避免在一般情況下的連接,並且使用選擇或者子選擇來利用二級緩存。 – 2012-04-23 14:44:40