Hibernate のセッション管理について: openSession() と getCurrentSession()
Hibernate には、セッション管理のための 2 つのメソッド、openSession() と getCurrentSession() が用意されています。 )。それぞれに特定の用途があり、さまざまなレベルの制御が可能です。
1. hibernate.current_session_context_class:
このプロパティは、Hibernate が Web アプリケーション コンテキストでセッションを管理する方法を決定します。 「スレッド」または「管理対象」のいずれかに設定できます。
2. openSession() と getCurrentSession():
openSession(): 新しいセッションを作成します。セッションはコンテキストにバインドされていないため、使用後は明示的に閉じる必要があります。これは通常、セッションのライフサイクルを完全に制御する必要がある場合に使用されます。
getCurrentSession(): 現在のスレッドまたはコンテキストにバインドされているセッションを取得します。セッションが存在しない場合は、新しいセッションを開き、それを現在のコンテキストにバインドします。このメソッドは通常、単一の HTTP リクエスト内でセッションを維持する必要がある Web アプリケーションで推奨されます。
要約すると、hibernate.current_session_context_class を「thread」に設定すると、getCurrentSession() をサーブレット フィルター内で使用できます。またはセッションを開いてアクセスするための他のスレッドベースのコンポーネント。
3.セッションの有効期間:
Web アプリごとに 1 つのセッション: セッションはスレッドセーフではなく、複数の要求スレッドが同じセッションにアクセスする可能性があり、同時実行の問題が発生する可能性があるため、推奨されません。
リクエストごとに 1 つのセッション: Web アプリケーションで推奨されます。これにより、各リクエストに独自の個別のセッションが確保され、同時実行性やスレッドの安全性の問題が排除されます。
以上がHibernate セッション管理: openSession() と getCurrentSession() - どちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。