Hibernate Left Outer Join问题:加入时预期的路径

时间:2010-10-12 13:48:56

标签: java hibernate orm hql left-join

我有两张桌子,例如:
文章和条款相关
它们具有一对一的关系,ArticleRelevance是可选的,这意味着文章可能(或可能不)具有ArticleRelevance。

我想选择所有文章以及ArticleRelevance详细信息。

使用传统的SQL,我将对表进行外连接,例如

SELECT *
FROM ARTICLE A LEFT OUTER JOIN ARTICLE_RELEVANCE AR ON A.ARTICLE_ID = AR.ARTICLE_ID

我在HQL中尝试了类似的查询,并获得了一条带有消息"Path Expected for Join"

的异常

我无法理解这条消息。这意味着什么,我该如何解决?

(正如你可能已经猜到的那样)我是一个绝对的冬眠新手。

使用HQL。实际上我已经有一个HQL,连接了两个或三个表,我必须添加这个条件。

StringBuffer hql = new StringBuffer();
hql.append(" select new service.orders.Order (order.orderNo, article.articleNo, article.articleName)");
hql.append(" from (Order order join  Article article with order.articleNo = article.articleNo) left outer join  ArticleRelevance articleRelevance with article.articleNo = articleRelevance.articleNo");
hql.append(" and order.orderNo =  "+orderNumber);

this论坛中,有人说这是“缺少功能”。真?

1 个答案:

答案 0 :(得分:8)

  

我在HQL中尝试了类似的查询,并获得了一条带有“预期加入路径”的消息的异常

使用HQL,[ LEFT [OUTER] | INNER ] JOIN沿着关联路径完成(使用标识变量后跟一个点和一个关联字段构建)。在你的情况下是这样的:

from Article a left join a.articleRelevance

关键字OUTER是可选的。

你的更大的疑问变成了:

select new service.orders.Order(order.orderNo, article.articleNo, article.articleName)
from Order order 
join order.article article
left outer join article.articleRelevance
where order.orderNo = :orderNo

请注意使用命名参数 :orderNo(不要连接参数)。像这样使用它:

String queryString = "...";
Query q = session.createQuery(queryString);
q.setParameter("orderNo", orderNumber);
List<Order> results = q.list();

参考