我使用PostgreSQL, Intellij IDEA, Spring MVC, Hibernate。
当我试图从表"users"中检索用户列表时,我收到如下异常:
严重:servlet .service()为servlet [idea]在上下文与路径[]抛出异常[请求处理失败;嵌套异常是org.hibernate.QueryException: unexpected char: ' ' ' [select * from "Users"]],有根本原因org.hibernate.QueryException: unexpected char: '"' [select * from "Users"]。
当我尝试在DB控制台执行SQL查询(select * from "Users"
)时,它工作得很好。
下面是我收到异常时的代码:
public List listUser() {
return sessionFactory.getCurrentSession()
.createQuery("select * from "Users"").list();
}
谁能就这个问题给我提点建议吗? 从查询中删除"
和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版本。
所以当你使用HQL时,你的查询应该是:
select from Users
假设你的Entity
类是Users
或者只是from Users
你需要这样做:
...
return sessionFactory.getCurrentSession().createQuery("SELECT * FROM Users").list();
}
你也可以这样做HQL查询:
...
String HQL = "FROM Users";
return sessionFactory.getCurrentSession().createQuery(HQL);
}