Hibernate 左外连接问题:连接时预期的路径
我有两张桌子,类似于:
文章和文章相关性
它们具有一对一的关系,并且 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);
在此论坛中,有人说这是“缺少功能”。真的?
I have two tables, something like:
Article and ArticleRelevance
They have a one to one relationship, and ArticleRelevance is optional, meaning a Article may (or may not) have a ArticleRelevance.
I want to select all articles along with the ArticleRelevance details.
With traditional SQL, I will do a outer join on the tables, like
SELECT *
FROM ARTICLE A LEFT OUTER JOIN ARTICLE_RELEVANCE AR ON A.ARTICLE_ID = AR.ARTICLE_ID
I tried a similar query in HQL and got a Exception with message "Path Expected for Join"
I am unable to understand this message. What does this mean, and how do I solve it?
(As you probably have already guessed) I am an absolute hibernate newbie.
I have to use HQL. Actually I have an HQL already, joining two or three tables, and I have to add this condition.
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);
In this forum, someone says this is "missing functionality". True?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
With HQL,
[ LEFT [OUTER] | INNER ] JOIN
是沿着关联路径完成的(由一个标识变量后跟一个点和一个关联字段构成)。所以在你的情况下是这样的:关键字 OUTER 是可选的。
您的更大查询将变为:
请注意使用命名参数
:orderNo
(不要连接参数)。像这样使用它:参考资料
With HQL, a
[ LEFT [OUTER] | INNER ] JOIN
is done along an association path (constructed with an identification variable followed by a dot and an association field). So something like this in your case:The keyword OUTER is optional.
And your bigger query becomes:
Note the use of a named parameter
:orderNo
(don't concatenate parameters). Use it like this:References