2014-11-05 94 views
1

我想優化一個頁面,其中加載了很多對象,其中許多對象的屬性都使用hibernate的延遲加載。但是很難手動找到它們,因爲當我看到someItem.getSmth()時,我不知道它實際上是惰性加載的(它不是我的代碼),除此之外,我可以跳過這些加載,因此我需要一些自動找到它的方法。我試圖打開hibernate的SQL日誌記錄,但它不可能讀取它,因爲它每頁加載大約50兆日誌,它不告訴我查詢從哪裏調用。是否有可能知道哪些對象是懶加載和從哪裏?如何捕捉hibernate的延遲加載?

回答

1

是否有可能知道哪些對象是懶加載和從哪裏?

你可以分析你的實體bean的註解OneToOneOneToManyManyToOneManyToMany,如果找到了,檢查物業fetch是否具有價值FetchType.LAZY

這可以讓你知道哪些對象是懶加載的,哪些類不是調用的方法。

+0

但是這就是我所說的「手動」:)我可以以這種方式錯過很多事情,因爲有很多對象被加載和很多加載數據的場景,所以很難手動找到所有東西。 – mykola 2014-11-05 10:38:48

+0

@mykola,以及你試圖挖掘到50M大滯後「magy」!對於這樣的任務,除非已經有一個可以幫助你的工具,否則你將永遠不得不手動編寫一些小工具來爲你自動完成工作,而使用一些正則表達式來解析日誌文件。如果您不需要從中調用延遲加載方法的方法,那麼答案中的方法是可以的,您不會錯過任何內容。另外,請在你的問題中添加你想要了解的一組*事物的描述,這將有助於人們給出更合適的答案。 – A4L 2014-11-05 11:01:35

+0

問題是沒有什麼可以解析的,因爲hibernate日誌不包含關於它是否是延遲加載或其他的信息。 – mykola 2014-11-06 10:22:17