PostgreSQL Hibernate和Intellij IDEA导致org.hibernate.QueryException:意外的char:'“'

时间:2013-05-17 18:00:06

标签: java hibernate

我使用PostgreSQL,Intellij IDEA,Spring MVC,Hibernate。

当我尝试从“用户”表中检索用户列表时,我收到如下所示的异常:

  

SEVERE:servlet [idea]的Servlet.service()在上下文中与path []引发了异常[请求处理失败;嵌套异常是org.hibernate.QueryException:意外的char:'“'[select * from”Users“]]具有根本原因   org.hibernate.QueryException:意外字符:'“'[select * from”Users“]。

当我在数据库控制台中尝试执行SQL查询(select * from "Users")时,它工作正常。

当我收到异常时,这是我的代码:

public List listUser() {
  return sessionFactory.getCurrentSession()
      .createQuery("select * from \"Users\"").list();
} 

有人可以就此问题向我提出建议吗?

3 个答案:

答案 0 :(得分:0)

从查询中删除"select *,不需要它们:

.createQuery("from Users")

但是你的实体真的被称为Users还是这只是表名?因为Hibernate希望您在查询中使用实体名称

如果要直接查询Users表,请使用

.createSQLQuery("select * from Users").list();

相反,它只返回一个List<Object[]>,您的列是数组的元素。你可以让hibernate转换成一个实体(我假设它被称为User),如下所示:

.createSQLQuery("select * from Users").addEntity(User.class).list();

虽然我真的建议使用HQL版本。

答案 1 :(得分:0)

你需要这样的东西:

...    
    return sessionFactory.getCurrentSession().createQuery("SELECT * FROM Users").list();
}

您也可以使用HQL查询执行此操作:

         ...
         String HQL = "FROM Users";
         return sessionFactory.getCurrentSession().createQuery(HQL);
    }

答案 2 :(得分:0)

因此,当您使用HQL时,您的查询应该是:

select from Users

假设您的Entity课程为Users

或只是from Users