有些時候,我想將關係定義爲懶惰加載,因爲90%的時間我不想要子實體,但在某些情況下也有可能一次獲得整個層次結構。我不希望通過使用命名查詢來實現此目的,因爲當我轉換爲例如父子層次結構時,父子層次結構很有用。 JSON格式。目前我的詭計是調用.getChildEntities()。size()強制延遲加載在同一個事務中。爲什麼JPA沒有爲延遲加載關係提供loadChildren()方法?
有沒有更好的方法?
有些時候,我想將關係定義爲懶惰加載,因爲90%的時間我不想要子實體,但在某些情況下也有可能一次獲得整個層次結構。我不希望通過使用命名查詢來實現此目的,因爲當我轉換爲例如父子層次結構時,父子層次結構很有用。 JSON格式。目前我的詭計是調用.getChildEntities()。size()強制延遲加載在同一個事務中。爲什麼JPA沒有爲延遲加載關係提供loadChildren()方法?
有沒有更好的方法?
取決於當然的JPA實施。有些(大多數)會使用你引用的方法調用加載所有內容,但有些可能會因爲內存管理的原因而發出COUNT(*)查詢來獲取大小(不希望加載所有元素的情況下有很多)
--Andy(DataNucleus)
也許你可以將用戶連接抓取條款
章:10.2.3.5.3。 JPQL Fetch加入
感謝您的評論,Andy。我知道我的解決方法可能並不總是適用於所有的實現(這就是爲什麼它是一個黑客:))。但是,當然,必須有一個標準的方法來加載子實體。我可以迭代它們,對主鍵值進行多餘的調用,但這不完全是優雅的... – davek 2009-10-03 18:02:23
悲傷地沒有標準方式。這個想法是持久性實現在你需要的時候得到你的數據,所以你放棄了控制,只是說「懶惰地加載它」。你的impl不能有效地爲你提供數據嗎?那裏不是所有的元素? – DataNucleus 2009-10-04 08:07:05
是的,我的實現向我提供了我需要的所有數據,但是調用一個屬性(我不直接使用),除了強制延遲加載看起來並不「正確」之外,沒有任何其他原因。我很高興實現能夠在需要時爲我提供數據,但如果我碰巧已經轉移到另一個事務上,那麼它會抱怨。 – davek 2009-10-04 17:31:50