ホームページ >Java >&#&チュートリアル >JPA @OneToOne 遅延読み込みが機能しないのはなぜですか?

JPA @OneToOne 遅延読み込みが機能しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 13:53:13929ブラウズ

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

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 (オプション = false、フェッチ = 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。