HQL 中的内部连接查询

新手上路,请多包涵

我无法为内部联接执行 HQL,查询在 sql 中正确执行,但在 HQL 中不正确。我不知道我在哪里失踪了。你的帮助是可观的。

  ***Error***: org.hibernate.hql.ast.QuerySyntaxError: unexpected token: ON near line 1, column 148 [SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price FROM com.model.Orders  orders INNER JOIN orders.OrderProcessing as op ON op.u_id = orders.u_id INNER JOIN orders.Product as product ON product.p_id = orders.p_id WHERE product.p_id = '208' ORDER BY op.username]

productList = (List<Orders>) session.createQuery(
 "SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price " +
 "FROM Orders orders " +
 "INNER JOIN orders.OrderProcessing as op " +
 "ON op.u_id = orders.u_id " +
 "INNER JOIN orders.Product as product " +
 "ON product.p_id = orders.p_id " +
 "WHERE product.p_id = '"+p_id +"' " +
 "ORDER BY op.username"
).list();

原文由 user1395824 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 290
1 个回答

HQL 中的连接语法略有不同。

如果您已经将这些关联映射到 Hibernate,则连接条件(要进行连接的 id 字段)通常由 Hibernate 本身处理(它已经在映射中定义了该信息),所以您只需要指定关联映射到哪个属性,然后对其进行连接:

 SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price
FROM Orders order
INNER JOIN order.orderProcessing as op
INNER JOIN order.product as product
ORDER BY op.username

如果您没有映射这些关联,您可能应该使用类似交叉连接的语法,并在 WHERE 子句中指定连接条件。请注意,这可能会对效率产生负面影响,具体取决于您的模式结构和 DBMS。

 SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price
FROM Orders order, OrderProcessing op, Product product
WHERE op.u_id = order.u_id AND product.p_id = orders.p_id
ORDER BY op.username

您可以在 14.3 中找到有关 HQL 连接的更多信息。 Hibernate 参考的 关联和连接 部分。

原文由 Xavi López 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题