java - HQL 中的内部连接查询

标签 java sql hibernate 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();

最佳答案

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. Associations and joins 中找到有关 HQL 连接的更多信息Hibernate 引用部分。

关于java - HQL 中的内部连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068597/

相关文章:

java - 忽略重音的 QueryDSL

java - HTTP 状态 500 - javax.servlet.ServletException : java. lang.NoClassDefFoundError: org/hibernate/Session

java - 简单逻辑的计算器问题

sql - 合并不同表中的列

C# 错误 : Input string was not in a correct format

sql - 我无法使用函数从表中发送数值

java - 如果 Hibernate 数据库连接失败,捕获 Grails 中的启动异常

java - 当我尝试发送要在 Wicket 口网页上显示的消息时,无法打开 IWebSocketConnection

java - JDK/JRE 版本是否单独确定 SSLSocket.getSupportedProtocols() 的结果?

hibernate - Hibernate 3.5 中的 @OrderColumn 注释