背景
使用spring框架整合Hibernate的时候,通过getCurrentSession()获得与线程绑定的session时,可能会遇到no session found for current thread的错误;
原因:调用getCurrentSession()之前,没有调用SessionFactory.openSession()开启session。
解决方案分两种情况
1、如果没有配置TranactionManager事务,那么调用getCurrentSession()之前,先调用SessionFactory.openSession();
我这个bean是配置版本的,不是注解版本的;所以有ser和get方法
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、在配置文件中使得事务注解生效