Hibernate:没有活动事务,createQuery无效

我的Spring + Hibernate项目有些问题。 当我尝试获取数据时,我有:

HTTP状态500 – 请求处理失败; 嵌套exception是org.hibernate.HibernateException:没有活动事务,createQuery无效这里我的xml配置代码:

           com.springapp.model.User com.springapp.model.UserRole com.springapp.model.Project     org.hibernate.dialect.MySQLDialect false thread        

来自DAO的方法

 @Override public List showAllUsers(){ List users = new ArrayList(); Session session = this.sessionFactory.getCurrentSession(); users = session.createQuery("from User").list(); return users; } 

所有标记为交易的服务。 当我删除thread我遇到了Hibernate错误:找不到当前线程的Session。 我怎么解决这个问题?

更新了#2 Full dao

 @Autowired private SessionFactory sessionFactory; @SuppressWarnings("unchecked") public User findByUserName(String username) { List users = new ArrayList(); Session session = this.sessionFactory.getCurrentSession(); session.beginTransaction(); users = session .createQuery("from User where username=?") .setParameter(0, username).list(); session.getTransaction().commit(); session.close(); if (users.size() > 0) { return users.get(0); } else { return null; } } @Override public void addUser(User user){ Session session = this.sessionFactory.getCurrentSession(); session.save(user); } @Override public void deleteUser(User user){ Session session = this.sessionFactory.getCurrentSession(); System.out.println(user.getUsername()); session.delete(user); } @Override public void verifyUser(User user){ Session session = this.sessionFactory.getCurrentSession(); session.update(user); } @Override public List showAllUsers(){ List users = new ArrayList(); Session session = this.sessionFactory.getCurrentSession(); session.beginTransaction(); users = session.createQuery("from User").list(); session.getTransaction().commit(); session.close(); return users; } 

现在我有“嵌套exception是org.hibernate.SessionException:Session已经关闭”是什么事?

更新这就是我调用这个方法的方法:

 @RequestMapping("/admin/updateUser") public String updateUser(ModelMap model,@ModelAttribute("userId") String username) { User user = this.userService.findByUserName(username); if(user.isEnabled()) user.setEnabled(false); else user.setEnabled(true); this.userService.updateUser(user); return "redirect:/admin"; } @RequestMapping("/admin") public String adminPanel(ModelMap model) { List users = this.userService.showAllUsers(); model.addAttribute("users",users); return "adminpanel"; } 

  session.beginTransaction(); 

在创建查询之前。 所以:

  List users = new ArrayList(); Session session = this.sessionFactory.getCurrentSession(); session.beginTransaction(); users = session.createQuery("from User").list(); return users; 

除了你的编辑

这意味着您尝试启动事务,而您没有提交或回滚另一个事务。 您必须使用,提交您的会话(最好是关闭会话)

 session.getTransaction().commit(); session.close(); 

在你的createQuery之后。 将它添加到showAllUsers()和findByUserName()

祝你好运!