【问题标题】:Hibernate Left Outer Join problem: path expected on join休眠左外连接问题:连接时预期的路径
【发布时间】:2011-04-24 08:16:08
【问题描述】:

我有两张桌子,例如:
文章和文章相关性
它们具有一对一的关系,并且 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 论坛中,有人说这是“缺少功能”。是吗?

【问题讨论】:

    标签: java hibernate orm hql left-join


    【解决方案1】:

    我在 HQL 中尝试了类似的查询,并收到一条异常消息“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();
    

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多