ホームページ >Java >&#&チュートリアル >JPA @OneToOne 遅延読み込みが機能しないのはなぜですか?
JPA OneToOne 関係における遅延読み込みの不満への対処
このクエリは、Hibernate での過剰な数の結合によりパフォーマンスが低下しているアプリケーションに関するものです。クエリ。 @OneToOne と @ManyToOne に FetchType.LAZY のアノテーションを付けているにもかかわらず、遅延読み込みが有効になっていないようです。
問題の根本
問題は深いところにありますエンティティ間の OneToOne およびManyToOne 関係の階層。 ManyToMany および OneToMany 関係は簡単に遅延させることができますが、特定の種類の OneToOne 関連には同じことが当てはまりません。
解決策
A. Nullable OneToOne Relationship (Unconstrained)
関連付けられたプロパティが null になる可能性がある制約のない 1 対 1 の関連付けは、バイトコード インストルメンテーションなしではプロキシできません。これは、所有者エンティティは、関連付けにプロキシまたは null が含まれているかどうかを知る必要があり、ベース テーブルの列だけからは判断できないためです。
B. Null 不可の OneToOne 関係
Null 不可の 1 対 1 関連付けの場合、次のオプションが利用可能です:
マップ結合関係としての関連付け。所有者テーブルに外部キー列を追加します:
@OneToOne(fetch = FetchType.LAZY) @JoinColumn(name="other_entity_fk") public OtherEntity getOther()
C. ManyToOne 関係
ManyToOne 関係は、制限なしで遅延させることができます: @ManyToOne(fetch=FetchType.LAZY)。ただし、このアノテーションがクエリ自体で上書きされていないことを確認してください。
考慮事項
OneToOne 関連付けの積極的な読み込みが重大なパフォーマンスの問題を引き起こしている場合、広範な設計上の欠陥が発生します。データモデルを調査する必要があります。最後の手段として、バイトコード インストルメンテーションが必要になる場合があります。
実装メモ
以上がJPA @OneToOne 遅延読み込みが機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。