遅いデータベース操作に直面していることを追跡しました。深いエンティティ階層を持つ OneToOne 関係を熱心にフェッチし、過剰な結合を引き起こす問題クエリ。残念ながら、@OneToOne(fetch = FetchType.LAZY) または @ManyToOne(fetch = FetchType.LAZY) にアノテーションを付ける試みは無駄であることが証明されました。
@ManyToOne(fetch = FetchType.LAZY) は意図したとおりに動作するはずです。クラスの注釈を置き換える可能性のある HQL クエリまたは Criteria API フェッチ モードのオーバーライドを再確認します。問題が解決しない場合は、さらに分析するためのコード サンプルを提供してください。
@OneToOne への対応はさらに微妙です。リレーションが null 許容でない場合は、次のように指定します。
@OneToOne(optional = false, fetch = FetchType.LAZY)
null 許容リレーションの場合は、次のアプローチを検討してください。
外部キーの追加列: 外部キー列を所有者テーブルに追加し、リレーションを次のようにマッピングします。 "joined":
@OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "other_entity_fk") public OtherEntity getOther();
@OneToOne(mappedBy = "other") public OwnerEntity getOwner();
遅延フェッチによりパフォーマンスの問題が軽減される可能性がありますが、続行してください。注意してください。過剰な結合につながる多数の熱心な OneToOne リレーションがある場合は、データ モデルまたはエンティティ リレーションシップの根本的な構造的問題に対処することを検討してください。
以上がJPA OneToOne 関係を怠惰にする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。