首頁 >Java >java教程 >為什麼我的 JPA @OneToOne 延遲載入不工作?

為什麼我的 JPA @OneToOne 延遲載入不工作?

Barbara Streisand
Barbara Streisand原創
2024-12-29 13:53:13926瀏覽

Why Isn't My JPA @OneToOne Lazy Loading Working?

解決JPA OneToOne 關係中的延遲載入問題

此查詢涉及由於Hibernate 中的聯接數量過多而導致性能緩慢的應用程序詢問。儘管用 FetchType.LAZY 註解了 @OneToOne 和 @ManyToOne,但延遲載入似乎並沒有生效。

問題根源

問題出在深層實體之間的一對一和多對一關係的層次結構。雖然 ManyToMany 和 OneToMany 關係很容易變得惰性,但對於某些類型的 OneToOne 關聯並非如此。

A.可空的一對一關係(無約束)

無約束的一對一一關聯(其中關聯的屬性可以為空)在沒有字節碼檢測的情況下無法代理。這是因為擁有者實體需要知道關聯是否包含代理或 null,這不能僅根據基底表的列來確定。

B.不可為空的一對一關係

對於不可為空的一對一關聯,可以使用以下選項:

  • 將關聯指定為強制關聯和惰性關聯:@OneToOne (可選= false,fetch = FetchType.LAZY)
  • 將關聯對應為連線關係,新增外鍵列:

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="other_entity_fk")
    public OtherEntity getOther()

C. ManyToOne關係

ManyToOne關係可以無限制地變得惰性:@ManyToOne(fetch=FetchType.LAZY)。但是,請確保此註釋不會在查詢本身中被覆蓋。

注意事項

如果急切載入 OneToOne 關聯會導致嚴重的效能問題,則更廣泛的設計缺陷應該研究資料模型。作為最後的手段,字節碼檢測可能是必要的。

實作說明

  • 在這種情況下, persistence.xml 檔案不用於定義關係或設定詳細資料.
  • 事後調查將需要共享特定的詳細信息,例如實體類別、查詢和生成的SQL,以獲得更精確的結果分析。

以上是為什麼我的 JPA @OneToOne 延遲載入不工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn