4

Hibernate セッションはスレッドセーフではないため、sessionFactory.getCurrentSession(); を介して現在の Hibernate セッションを取得できません。

sessionFactory.openSession(); を選択した場合 スレッド自体では正常に機能しますが、ネストされたクラス [スレッドから呼び出された] では、新しく開いた同じセッションにアクセスできません [「現在のスレッドのセッションが見つかりません」という例外がスローされます]。

Spring 3.1.1 と Hibernate 4.1.3 を使用しています

現在のセッションをスレッドで取得する方法はありますか?

または、スレッドから呼び出されるネストされたクラスに新しく開かれたセッションにアクセスする方法はありますか?

4

1 に答える 1

1

Spring と休止状態をsessionFactory.getCurrentSession();使用しているため、トランザクションで使用している場合は、現在のセッションを使用して取得します。そうしないと、メッセージ : で例外が発生しますNo Session found for current thread

例:

void someDBOperation() {
   Session session = sessionFactory.getCurrentSession(); // if not in transaction, exception : No Session found for current thread
   // some code
}


@Transactional  // use either annotated approach or xml approach for transaction
void someDBOperation() {
   Session session = sessionFactory.getCurrentSession(); // you will get session here
   // some code
}
于 2012-10-25T06:33:22.973 に答える