3

我正在尝试使用休眠从我的数据库中检索数据,但它一直抛出异常

2012-11-11 11:35:45,943 [main] 错误 com.storage.hibernate.DatabaseAccessRequestsImpl - 出现错误 javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:无法执行查询

@Override
public List<Trade> requestPeriod() {
    List<Trade> trades = null;
    EntityManager manager = emf.createEntityManager();
    Query query = manager.createQuery("from trade"); 
    try{
        trades = query.getResultList();
    }
    catch(PersistenceException e){
        logger.error("there was an error " + e);
    }
    catch(SQLGrammarException e){
        logger.error("there was an error " + e);
    }
    return trades;
}

我猜我使用的语法select all不正确,但是环顾四周后我看不到替代方法吗?

谢谢

4

2 回答 2

10

它应该是"from Trade"(大写 T),因为 Trade 是映射类的名称。

于 2012-11-11T12:01:22.123 回答
6

请注意,在 JPA 中,QLSELECT子句是强制性的,根据:10.2.1.1。JPQL 选择语句

选择语句是由以下子句组成的字符串:

  • 一个 SELECT 子句,它确定要选择的对象或值的类型;

  • 一个 FROM 子句,它提供指定查询的其他子句中指定的表达式所适用的域的声明;

[...]

在 BNF 语法中,选择语句定义为:

select_statement ::= select_clause from_clause [where_clause] [groupby_clause] [having_clause] [orderby_clause]

from Trade语法是特定于 Hibernate 的,为了符合规范,您应该始终使用:

select t from Trade t
于 2012-11-11T11:53:41.683 回答