如何在Thread中访问hibernate会话?

时间:2012-10-25 04:49:17

标签: spring hibernate

由于Hibernate会话不是线程安全的,我无法通过sessionFactory.getCurrentSession()获得currnet hibernate会话;

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

我正在使用Spring 3.1.1和Hibernate 4.1.3

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

或者有没有办法访问新打开的会话到从线程调用的嵌套类?

1 个答案:

答案 0 :(得分:1)

当您使用Spring和hibernate时,如果您在事务中使用它,则将使用sessionFactory.getCurrentSession();获取当前会话。否则,您将收到包含以下消息的异常:No Session found for current thread

e.g。 :

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
}