【问题标题】:PostgreSQL Hibernate and Intellij IDEA results in org.hibernate.QueryException: unexpected char: '"'PostgreSQL Hibernate 和 Intellij IDEA 导致 org.hibernate.QueryException: unexpected char: '"'
【发布时间】:2013-05-17 18:00:05
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    从查询中删除 "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 版本。它有效。但我不得不将表名从用户更改为用户。甚至认为我在查询中使用了大写 U 的用户。谢谢你的帮助!!
    【解决方案2】:

    所以当您使用 HQL 时,您的查询应该是:

    select from Users
    

    假设您的 Entity 课程是 Users

    或者只是from Users

    【讨论】:

      【解决方案3】:

      你需要这样的东西:

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

      您也可以使用 HQL 查询来做到这一点:

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

      【讨论】:

      • 现在我有这样的异常:严重:Servlet.service() for servlet [idea] in context with path [] throw exception [Request processing failed;嵌套异常是 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:* 在第 1 行第 8 列 [SELECT * FROM Users]] 附近,根本原因是 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌: * 在第 1 行第 8 列附近 [SELECT * FROM Users]
      • 尝试使用 HQL 查询,(“来自用户”)或您的实体名称。 docs.jboss.org/hibernate/orm/3.3/reference/en/html/…
      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多