ホームページ >Java >&#&チュートリアル >Hibernate ビューでセッションを開く: 使用するか使用しないか?

Hibernate ビューでセッションを開く: 使用するか使用しないか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 01:30:13727ブラウズ

Hibernate Open Session in View: To Use or Not to Use?

ビューで Hibernate オープン セッション: 物議を醸す実践

概要

ビューでオープン セッション(OSIV) は、Hibernate セッションを開いたままにしておくことができる Hibernate 機能です。リクエストとレスポンスのサイクル。この手法は Java コミュニティで議論のテーマとなっており、その利便性を主張する人もいれば、その欠点を疑問視する人もいます。

OSIV の問題

OSIV にはいくつかの課題があります:

  • 一貫性のないトランザクション処理: OSIV通常のトランザクションのライフサイクルをバイパスして、セッションを無期限に開いたままにします。これにより、データの整合性の問題など、意図しない結果が生じる可能性があります。
  • データベースのパフォーマンスの低下: セッションを開いたままにすると、応答処理中に追加のステートメントが実行されるため、データベースに負荷がかかります (例: 、遅延関連付けの初期化)は、自動コミット モードで発行されます。
  • ブラー レイヤー分離: OSIV では、ビジネス層と UI レンダリング フェーズの間の関心の分離が曖昧になり、アプリケーションのテストと保守が困難になります。
  • 接続リース時間の増加: セッション長期間開いたままにすることができ、データベース接続プールの制限が発生する可能性があります。リソース。

代替戦略

これらの問題を回避するために、開発者は代替戦略を採用できます。

  • 明示的に初期化遅延関連付け: Join Fetch またはを使用して、サービス層で遅延関連付けを初期化します。 FetchMode.SUBSELECT.
  • 個別の DAO クエリの作成: 必要な関連付けのみをフェッチするように調整された UI レイヤー用の特定の DAO クエリを作成します。
  • ビューを使用プロジェクション: 完全なものではなく、UI に必要な必須フィールドのみを返すプロジェクションを作成します。 entities.
  • FetchMode.LAZY と EAGER Loading を使用する: すぐには必要ないエンティティには FetchMode.LAZY を設定し、事前にロードする必要がある関連付けには FetchMode.EAGER を設定します。

春の OSIV の無効化Boot

Spring Boot はデフォルトで OSIV を有効にします。これを無効にするには、application.properties ファイルで次のプロパティを設定します。

spring.jpa.open-in-view=false

この設定により、各サービス層トランザクションの後に Hibernate セッションが確実に閉じられ、OSIV に関連する潜在的な欠点が防止されます。

以上がHibernate ビューでセッションを開く: 使用するか使用しないか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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