PostgreSQL Hibernate和Intellij IDEA导致org.hibernate.QueryException:意外字符:"""



我使用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);
    }

相关内容

最新更新