由于Hibernate会话不是线程安全的,我无法通过sessionFactory.getCurrentSession()获得currnet hibernate会话;
如果我选择sessionFactory.openSession();它适用于线程本身,但对于嵌套类[从线程调用]它不允许我访问同一个新打开的会话[引发“没有找到当前线程的会话”异常]。
我正在使用Spring 3.1.1和Hibernate 4.1.3
有没有办法在线程中获取当前会话?
或者有没有办法访问新打开的会话到从线程调用的嵌套类?
答案 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
}