版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/85274771
背景
使用spring框架整合Hibernate的时候,通过getCurrentSession()获得与线程绑定的session时,可能会遇到no session found for current thread的错误;
原因:调用getCurrentSession()之前,没有调用SessionFactory.openSession()开启session。
解决方案分两种情况
1、如果没有配置TranactionManager事务,那么调用getCurrentSession()之前,先调用SessionFactory.openSession();
2、如果配置了TranactionManager事务
2.1、在需要声明事务的方法上面@Transactional
@Transactional
public void purchase(String username, String isbn) {
// 1.根据isbn来查询价格和库存
int price = bookShopDaoImpl.findBookPriceByIsbn(isbn);
// 2.更新库存
bookShopDaoImpl.updateBookStock(isbn);
// 3.扣除账户余额
bookShopDaoImpl.updateUserAccount(username, price);
}
2.2、在配置文件中使得事务注解生效
<!--使得注解生效 -->
<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>