gpt4 book ai didi

java - Hibernate Left Outer Join问题: path expected on join

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:00 24 4
gpt4 key购买 nike

我有两个表,比如:
文章和文章相关性
它们具有一对一的关系,并且 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"

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

(您可能已经猜到了)我是一个绝对的 hibernate 新手。

必须使用 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论坛,有人说这是“缺失的功能”。真的吗?

最佳答案

I tried a similar query in HQL and got a Exception with message "Path Expected for Join"

使用 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();

引用资料

关于java - Hibernate Left Outer Join问题: path expected on join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com