クラス OpenSessionInViewInterceptor

java.lang.ObjectSE
org.springframework.orm.hibernate5.support.OpenSessionInViewInterceptor
実装されたすべてのインターフェース:
AsyncWebRequestInterceptorWebRequestInterceptor

public class OpenSessionInViewInterceptor extends ObjectSE implements AsyncWebRequestInterceptor
リクエストの処理全体で Hibernate Session をスレッドにバインドする Spring Web リクエストインターセプター。

このクラスは、"Open Session in View" パターンの具体的な表現です。これは、元のトランザクションがすでに完了しているにもかかわらず、Web ビューで関連付けの遅延読み込みを可能にするパターンです。

このインターセプターは、トランザクションマネージャーによって自動検出される現在のスレッドを介して Hibernate セッションを利用できるようにします。これは、HibernateTransactionManager を介したサービスレイヤートランザクション、および非トランザクション実行(適切に構成されている場合)に適しています。

OpenSessionInViewFilter とは異なり、このインターセプターは Spring アプリケーションコンテキストで構成されているため、Bean 接続を利用できます。

警告 : このインターセプターを既存のロジックに適用すると、リクエスト全体の処理に単一の Hibernate Session を使用することにより、これまでにない問題が発生する可能性があります。特に、永続オブジェクトと Hibernate Session の再関連付けは、同じオブジェクトのすでにロードされているインスタンスとの衝突を避けるために、リクエスト処理の最初に行う必要があります。

導入:
4.2
作成者:
Juergen Hoeller
関連事項:
  • フィールドの詳細

  • コンストラクターの詳細

    • OpenSessionInViewInterceptor

      public OpenSessionInViewInterceptor()
  • メソッドの詳細

    • setSessionFactory

      public void setSessionFactory(@Nullable SessionFactory sessionFactory)
      Hibernate セッションの作成に使用する Hibernate SessionFactory を設定します。
    • getSessionFactory

      @Nullable public SessionFactory getSessionFactory()
      Hibernate セッションの作成に使用する Hibernate SessionFactory を返します。
    • preHandle

      public void preHandle(WebRequest request) throws DataAccessException
      新しい Hibernate Session を開き、TransactionSynchronizationManager を介してスレッドにバインドします。
      次で指定:
      インターフェース WebRequestInterceptorpreHandle 
      パラメーター:
      request - 現在の Web リクエスト
      例外:
      DataAccessException
    • postHandle

      public void postHandle(WebRequest request, @Nullable ModelMap model)
      インターフェースからコピーされた説明: WebRequestInterceptor
      呼び出しが成功した、ビューのレンダリングの前に(もしあれば)リクエストハンドラーの実行をインターセプトします。

      ハンドラーの実行が成功した後にコンテキストリソースを変更することができます(たとえば、Hibernate セッションのフラッシュ)。

      次で指定:
      インターフェース WebRequestInterceptorpostHandle 
      パラメーター:
      request - 現在の Web リクエスト
      model - ビューに公開されるモデルオブジェクトのマップ(null の場合があります)。必要に応じて、公開されたモデルの分析やモデル属性の追加に使用できます。
    • afterCompletion

      public void afterCompletion(WebRequest request, @Nullable ExceptionSE ex) throws DataAccessException
      Hibernate Session をスレッドからバインド解除し、閉じます。
      次で指定:
      インターフェース WebRequestInterceptorafterCompletion 
      パラメーター:
      request - 現在の Web リクエスト
      ex - ハンドラーの実行時にスローされる例外(ある場合)
      例外:
      DataAccessException
      関連事項:
    • afterConcurrentHandlingStarted

      public void afterConcurrentHandlingStarted(WebRequest request)
      インターフェースからコピーされた説明: AsyncWebRequestInterceptor
      ハンドラーがリクエストを同時に処理し始めたときに、postHandle および afterCompletion の代わりに呼び出されます。
      次で指定:
      インターフェース AsyncWebRequestInterceptorafterConcurrentHandlingStarted 
      パラメーター:
      request - 現在のリクエスト
    • openSession

      protected Session openSession() throws DataAccessResourceFailureException
      このインターセプターが使用する SessionFactory のセッションを開きます。

      デフォルトの実装は SessionFactory.openSession() メソッドに委譲し、Session のフラッシュモードを "MANUAL" に設定します。

      戻り値:
      使用するセッション
      例外:
      DataAccessResourceFailureException - セッションを作成できなかった場合
      関連事項:
    • getParticipateAttributeName

      protected StringSE getParticipateAttributeName()
      リクエストがすでにインターセプトされていることを識別するリクエスト属性の名前を返します。

      デフォルトの実装では、SessionFactory インスタンスの toString() 表現を受け取り、PARTICIPATE_SUFFIX を追加します。