2013-05-17 43 views
0

我使用PostgreSQL,IntelliJ IDEA的,Spring MVC的,Hibernate的PostgreSQL的Hibernate和IntelliJ IDEA的结果org.hibernate.QueryException:意外字符:“'

当我试图从表中检索的用户列表。”用户”我收到异常象下面这样:

重度:Servlet.service()进行的servlet [想法]在上下文中与路径[]抛出异常[请求处理失败;嵌套的异常是org.hibernate.QueryException:意想不到炭: ' “'[选择* ”用户“]与根源 org.hibernate.QueryException:意想不到字符: '”'。[从 “用户”]选择*

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

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

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

有人可以指点我这个问题?

回答

0

取出"select *从查询,他们没有必要:

.createQuery("from Users") 

不过是你的实体真的叫Users或者这只是表名?因为Hibernate希望你在查询中使用实体名称

如果你想直接查询Users表,使用

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

代替,但它只会返回一个List<Object[]>,与你的列是数组(S)的元素。您可以休眠做翻译成一个实体(我假定这就是所谓的User)像这样:

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

虽然我真的建议使用HQL版本这一点。

+0

这只是表名。 –

+0

我将实体名称更改为用户并使用HQL版本。它的工作原理。但我不得不将表名从用户更改为用户。甚至认为我在查询中使用了大写字母U的用户。感谢您的帮助!! –

0

你需要的东西是这样的:

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

你可以做到这一点与HQL查询:

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

现在我有这样的例外: SEVERE:Servlet.service()用于servlet [idea]与path []的上下文抛出异常[Request processing failed;嵌套异常是org.hibernate.hql.internal.ast。QuerySyntaxException:意外标记:*第1行第8列[SELECT * FROM用户]]根本原因 org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:*第1行第8列[SELECT * FROM Users ] –

+0

尝试使用HQL查询(“来自用户”)或您的实体名称。 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html – Sark

0

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

select from Users 

假设你Entity类是Users

或者只是from Users