ビューで 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 サイトの他の関連記事を参照してください。