4

由于休眠会话不是线程安全的,我无法通过 sessionFactory.getCurrentSession(); 获取当前休眠会话;

如果我选择 sessionFactory.openSession(); 它适用于线程本身,但对于嵌套类[从线程调用],它不允许我访问同一个新打开的会话 [抛出“当前线程未找到会话”异常]。

我正在使用 Spring 3.1.1 和 Hibernate 4.1.3

有没有办法在线程中获取当前会话?

或者有什么方法可以将新打开的会话访问到从线程调用的嵌套类?

4

1 回答 1

1

当您使用 Spring 和 hibernate 时,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 回答