休止状態 4 で Spring 3.2 に移行することを検討している場合、トランザクションのコンテキストで現在のセッションをどのように取得する必要がありますか? HibernateTransactionManager
私がコード (および実際には他の TM)を理解している限り、トランザクションを開始するとsessionFactory....openSession()
、このセッションに hibernate 側の currentSession が設定されず、単に新しいセッションが返されます。次に、ThreadLocal コンストラクトHibernateTransactionManager
を使用してセッション オブジェクトを維持します。ここで、バインドされた現在のトランザクションにTransactionSynchronizationManager
アクセスしたい場合は、単純に呼び出して、既存のセッションを内部的にチェックします。Session
SessionFactoryUtils.getSession()
TransactionSynchronizationManager
現在、hibernate 4 にはその方法論がなく、SessionFactory.getCurrentSession()
HibernateTemplate JavaDoc に従って使用することになっています。
注: Hibernate 3.0.1 の時点では、トランザクション Hibernate アクセス コードもプレーンな Hibernate スタイルでコーディングできます。したがって、新しく開始したプロジェクトの場合は、代わりに、SessionFactory.getCurrentSession() に基づいて、データ アクセス オブジェクトをコーディングする標準の Hibernate3 スタイルを採用することを検討してください。
HibernateTransactionManager
OWN セッション コンテキストを使用する をまだ使用している場合、 を呼び出すSessionFactory.getCurrentSession()
と、現在のトランザクションのセッションを取得できません。これは、hibernate のスレッドごとの内部コンテキストを参照しているためです。正しいですか? どんなポインタでも大歓迎です
編集: 基本的に、CurrentSessionContext の独自の実装を作成しようとしています。以前は、SessionFactoryUtils.getSession(sf, true) を使用するだけで、スレッドごとに現在バインドされているセッションが返されました。