ホームページ >Java >&#&チュートリアル >JPA OneToOne 関係を怠惰にする方法?

JPA OneToOne 関係を怠惰にする方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 05:53:13789ブラウズ

How to Make JPA OneToOne Relationships Lazy?

JPA OneToOne リレーションを遅延させるにはどうすればよいですか?

遅いデータベース操作に直面していることを追跡しました。深いエンティティ階層を持つ OneToOne 関係を熱心にフェッチし、過剰な結合を引き起こす問題クエリ。残念ながら、@OneToOne(fetch = FetchType.LAZY) または @ManyToOne(fetch = FetchType.LAZY) にアノテーションを付ける試みは無駄であることが証明されました。

@ManyToOne

にアドレス指定します。

@ManyToOne(fetch = FetchType.LAZY) は意図したとおりに動作するはずです。クラスの注釈を置き換える可能性のある HQL クエリまたは Criteria API フェッチ モードのオーバーライドを再確認します。問題が解決しない場合は、さらに分析するためのコード サンプルを提供してください。

@OneToOne

@OneToOne への対応はさらに微妙です。リレーションが null 許容でない場合は、次のように指定します。

@OneToOne(optional = false, fetch = FetchType.LAZY)

null 許容リレーションの場合は、次のアプローチを検討してください。

  1. 外部キーの追加列: 外部キー列を所有者テーブルに追加し、リレーションを次のようにマッピングします。 "joined":

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "other_entity_fk")
    public OtherEntity getOther();
    @OneToOne(mappedBy = "other")
    public OwnerEntity getOwner();
  2. バイトコード インストルメンテーション: データベースの変更が不可能な場合は、最後の手段としてバイトコード インストルメンテーションを検討してください。
  3. 代替ソリューション: 可能であれば、次のような代替ソリューションを検討します。固有の ManyToOne 関係を使用するか、データ モデルを再検討して OneToOne 階層の深さを減らします。

注意

遅延フェッチによりパフォーマンスの問題が軽減される可能性がありますが、続行してください。注意してください。過剰な結合につながる多数の熱心な OneToOne リレーションがある場合は、データ モデルまたはエンティティ リレーションシップの根本的な構造的問題に対処することを検討してください。

以上がJPA OneToOne 関係を怠惰にする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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