【问题标题】:unexpected token: ON in hql query when using left outer join意外令牌:使用左外连接时在 hql 查询中打开
【发布时间】:2014-12-30 07:28:19
【问题描述】:

我在休眠中使用左连接,但它给我抛出了一个异常,即意外令牌“ON” 我的查询在 sql 中运行良好,但我想在 hql 中使用相同的查询。所以请帮助我克服这个异常。

String hql = "SELECT p.posSerialNo, p.posAssignDate,p.posDetails,p.posMake,p.posSoftwareVer,p.merchants ,m.merchantFirstname, m.merchantLastname , m.merchantBusinessName FROM PosDevices as p LEFT JOIN Merchants as m ON p.merchants = m.merchantId";

            Query query = session.createQuery(hql);
            System.out.println(query);
            posList1 = query.list();

【问题讨论】:

  • 您的语法错误。 HQL 语法与普通 SQL 完全不同。在谷歌上查看:)
  • 我知道 hql 和 sql 之间存在语法差异,但我没有从那里得到正确的解决方案 rhats y 我在这里发布。
  • 看,我的回答。这可能会对您有所帮助。

标签: hibernate left-join hql


【解决方案1】:

Hibernate 将处理您的映射(父级的Primary key 和子级的FK

为了您的理解,

使用 HQL

select from Parent as p left outer join p.child  as c

生成的 SQL

select parent0_.id as id2_0_, child1_.id as id0_1_, parent0_.childFK as childFK2_0_, parent0_.prop as prop2_0_, child1_.childProp as childProp0_1_ from Parent parent0_ left outer join Child child1_ on parent0_.childFK=child1_.id

【讨论】:

    【解决方案2】:


    请参考hql official document

    String hql = "SELECT p.posSerialNo, p.posAssignDate,p.posDetails,p.posMake,p.posSoftwareVer,p.merchants ,m.merchantFirstname, m.merchantLastname , m.merchantBusinessName FROM PosDevices as p LEFT OUTER JOIN Merchants as m";
    

    试试这个

    【讨论】:

    • 不,它在这里不起作用我如何比较主键和外键关系
    • 您遇到了什么错误? Hibernate 会为你比较你的主键和外键关系。它将检查您的注释或 xml 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多