簡體   English   中英

Hibernate Left Outer Join問題:加入時預期的路徑

[英]Hibernate Left Outer Join problem: path expected on 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);

這個論壇中,有人說這是“缺少功能”。 真正?

我在HQL中嘗試了類似的查詢,並獲得了一條消息“預期加入路徑”的異常

使用HQL, [ LEFT [OUTER] | INNER ] JOIN [ 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();

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM