谷歌搜索了很多,但是没有找到合适的解决方案。我试图建立一个简单的电子商务网站,我必须在管理面板中显示订单列表,但在那里卡住了。错误显示“ 会话已关闭!”,但我在请求方法时打开了一个会话。请有人告诉我我在做什么错。
public List<OrderModel> getAllOrders() throws HibernateException {
session = sessionFactory.openSession();
try {
final String hql = "FROM OrderModel WHERE status=:status";
Query query = session.createQuery(hql);
query.setParameter("status", "0");
return query.list();
} catch (HibernateException e) {
throw new HibernateException(e.getMessage());
} finally {
if(session.isOpen()){
session.close();
}
}
}
会话在父类中声明。
@Autowired
protected SessionFactory sessionFactory;
protected Session session;
protected Transaction trans;
答案 0 :(得分:1)
尝试将此if(session.isOpen())
替换为if(session == null || session.isOpen() == false)
答案 1 :(得分:0)
从评论中复制:-
您的session
对象是一个类变量,它不是线程安全的。也许其他一些线程正在关闭会话?尝试将session
放入
Session session = sessionFactory.openSession();
还可以看看DAO模式。