基本休眠选择所有语法

时间:2012-11-11 11:38:26

标签: java database hibernate exception jpa

我正在尝试使用hibernate从我的数据库中检索数据,但它不断抛出异常

  

2012-11-11 11:35:45,943 [主要]错误   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的语法是不正确的,但在环顾四周之后,我看不到其他选择?

由于

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:6)

请注意,在JPA中,QL SELECT子句是强制性的,按照:10.2.1.1. JPQL Select Statement

  

select语句是一个字符串,由以下子句组成:

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

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

  •   
     

[...]

     

在BNF语法中,select语句定义为:

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

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

select t from Trade t