1

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

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

严重:servlet [idea] 的 Servlet.service() 在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.hibernate.QueryException: unexpected char: '"' [select * from "Users"]],根本原因是 org.hibernate.QueryException: unexpected char: '"' [select * from "Users"]。

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

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

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

有人可以就这个问题给我建议吗?

4

3 回答 3

0

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

select from Users

假设你的Entity班级是Users

要不就from Users

于 2013-05-17T18:38:24.430 回答
0

你需要这样的东西:

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

您也可以使用 HQL Query 做到这一点:

         ...
         String HQL = "FROM Users";
         return sessionFactory.getCurrentSession().createQuery(HQL);
    }
于 2013-05-17T18:30:54.107 回答
0

从查询中删除"select *,它们不是必需的:

.createQuery("from Users")

但是您的实体是否真的被调用Users了,或者这只是表名?因为 Hibernate 期望您在查询中使用实体名称

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

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

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

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

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

于 2013-05-17T18:20:45.217 回答