10

如何禁用休眠中的延遲加載?我正在使用持久性註釋,而不是hbm xml文件。在休眠中禁用延遲加載

我通過ID獲取單個對象,並希望加載所有屬性。會話在我使用該對象之前關閉。

謝謝!

+0

我除了這個問題:我如何才能在不是代理,空集將出現的方式禁用延遲加載? – 2013-01-22 01:59:31

回答

5

你需要註釋,你想不懶加載FetchType.EAGER

@ManyToOne(fetch = FetchType.EAGER) 

你看屬性,它不是你加載是懶加載的對象。相反,該對象的關聯是懶惰的,如果這是你想要的行爲,你需要告訴他們不要這樣做。

如果這些對象也有想要加載的關聯,則還需要對它們進行註釋。

1

您可以指定fetch = FetchType.EAGER上所有的相關項目,遞歸,但這將加載數據的一大堆你可能不感興趣的內容。

它通常是一個更好的解決方案,至少讓所有的一對多和多對多協會到LAZY(這是默認值),並在關閉會話之前對它們進行初始化,如果您的用例需要它們(甚至用臨時查詢加載它們)。

默認情況下,OneToOne和ManyToOne關聯是EAGER,並且這通常會產生太多的請求。我通常更喜歡將所有的用例標記爲懶惰,除非所有的用例都需要獲取關聯。