面對緩慢的資料庫操作,您已經追蹤到急切地獲取具有深層實體層次結構的 OneToOne 關係的問題,導致查詢中出現過多的連接。不幸的是,嘗試註釋 @OneToOne(fetch = FetchType.LAZY) 或 @ManyToOne(fetch = FetchType.LAZY) 已被證明是徒勞無功的。
@ManyToOne(fetch = FetchType.LAZY)應該按預期工作。仔細檢查 HQL 查詢或 Criteria API 取得模式中可能取代類別註解的覆蓋。如果問題仍然存在,請提供程式碼範例以供進一步分析。
@OneToOne 較為細緻。若關係不可為空,請依下列方式指定:
@OneToOne(optional = false, fetch = FetchType.LAZY)
對於可為空的關係,請考慮下列方法:
加上外鍵Column:將外鍵列新增外鍵列並將關係對應為"joined":
@OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "other_entity_fk") public OtherEntity getOther();
@OneToOne(mappedBy = "other") public OwnerEntity getOwner();
雖然延遲取得可以緩解效能問題,但請謹慎行事。如果存在大量急切的 OneToOne 關係導致過度連接,請考慮解決資料模型或實體關係中的潛在結構問題。
以上是如何讓 JPA OneToOne 關係變得惰性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!