我使用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();
}
有人可以就此问题向我提出建议吗?
答案 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