【问题标题】:Basic Hibernate Select all Syntax基本休眠全选语法
【发布时间】:2012-10-31 02:40:43
【问题描述】:

我正在尝试使用 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 的语法不正确,但环顾四周后我找不到替代方法?

谢谢

【问题讨论】:

  • 还要写EntityManager的完整代码
  • 如果 Trade 是映射类的名称,它应该是 "from Trade"(大写 T)
  • @guido 这确实是正确的答案 - 非常感谢
  • @guido:请将您的评论变成答案。我添加了更多细节,但功劳应该归你所有。 SkyR,请不要接受我的回答,我不是第一个 :-)。
  • @TomaszNurkiewicz 谢谢,我刚刚添加了一条评论,因为它可能只是一个错字

标签: java database hibernate exception jpa


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    • 一个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
    

    【讨论】:

    • 这有助于我从一个表中选择所有值,而从另一个表中选择一个。非常感谢!
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2017-11-14
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多