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