休眠-会话已关闭

时间:2018-07-17 03:28:43

标签: java hibernate spring-mvc session

谷歌搜索了很多,但是没有找到合适的解决方案。我试图建立一个简单的电子商务网站,我必须在管理面板中显示订单列表,但在那里卡住了。错误显示“ 会话已关闭!”,但我在请求方法时打开了一个会话。请有人告诉我我在做什么错。

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;

2 个答案:

答案 0 :(得分:1)

尝试将此if(session.isOpen())替换为if(session == null || session.isOpen() == false)

答案 1 :(得分:0)

从评论中复制:-

您的session对象是一个类变量,它不是线程安全的。也许其他一些线程正在关闭会话?尝试将session放入

之类的方法中
Session session = sessionFactory.openSession();

还可以看看DAO模式。