ホームページ > Java > &#&チュートリアル > Hibernate の Open Session in View 戦略を使用する必要がありますか?

Hibernate の Open Session in View 戦略を使用する必要がありますか?

Linda Hamilton
リリース: 2024-12-29 04:44:10
オリジナル
171 人が閲覧しました

Should I Use Hibernate's Open Session in View Strategy?

Hibernate Open Session in View 実践の欠点

概要

Hibernate の Open Session in View (OSIV) 戦略には次のような特徴があります特にマルチ JVM 環境やトランザクションの即時コミットが必要な場合には、いくつかの欠点があります。単一 JVM アプリケーションで提供される利便性にも関わらず、専門家はその使用を控えるようアドバイスしています。

OSIV の問題

OSIV の主な懸念は、データ取得に対するその型破りなアプローチにあります。 UI のレンダリング中に永続コンテキストを開いたままにし、要求に応じて遅延関連付けを初期化できるようにします。これにより、複数の欠点が生じます。

  • レンダリング時の自動コミット: サービス層トランザクションが完了した後、UI レンダリングによってトリガーされた後続のステートメントはすべて自動コミット モードで実行され、不要なステートメントが生成されます。
  • 曖昧な懸念: サービスとサービスの間の懸念の分離UI レイヤーが曖昧になり、テストと分離がより困難になります。
  • N 1 クエリの可能性: UI レイヤーの制限により、N 1 クエリの問題が発生し、パフォーマンスが低下する可能性があります。
  • 接続リースの問題: OSIV は UI レンダリング全体にわたってデータベース接続を保持し、トランザクションのスループットとプールの輻輳を引き起こす可能性があります。

LazyLoadExceptions の回避

OSIV に依存する代わりに、別の戦略を使用して LazyLoadExceptions を防ぐことができます:

  • 関連付けの取得: 明示的サービス メソッドの呼び出し中に関連付けを初期化します。
  • 読み取り専用フェッチ: 予期しないプロキシを防ぐために、関連付けリストを読み取り専用としてマークします。
  • バッチ フェッチ: @BatchSize と FetchMode.SUBSELECT を使用して最適化するフェッチ。
  • データ アクセス層 (DAL) クエリ: データ取得要件を正確に定義するカスタム DAL クエリを作成します。

Spring Boot での OSIV の無効化

Spring Boot では、OSIV がデフォルトで有効になっています。これを無効にするには、application.properties ファイルに次の行を追加します。

spring.jpa.open-in-view=false
ログイン後にコピー

これにより OSIV が無効になり、開発者がより適切な方法で LazyLoadExceptions を処理できるようになります。

以上がHibernate の Open Session in View 戦略を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート