2012-07-31 89 views
5

我搜索一种方式来做与hql相同的表的左连接。HQL,左连接在同一张表

这是我的查询

FROM Tvshow e 
    LEFT JOIN Tvshow e1 ON e1.num = e.num 
WHERE e1.code = '024' 
    AND e.code is not null 
    AND e.code != '024' 

休眠似乎并不喜欢的运营商。

回答

0

我不使用休眠,但是通过这个例子来看:

from Cat as cat 
inner join cat.mate as mate 
left outer join cat.kittens as kitten 

从这个页面:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins-forms

它看起来像你干脆不要做一个ON?如果我错了,请告诉我,我会解决这个问题。

FROM Tvshow e 
    LEFT JOIN Tvshow e1 
WHERE e1.code = '024' 
    AND e.code is not null 
    AND e.code != '024' 
+0

删除选择,我的错误,但错误是相同 – 2012-07-31 13:48:40

+0

我要修改我的回答。我不使用休眠,但我正在查看语法。 – Aushin 2012-07-31 13:51:03

+0

@roberttrudel让我知道,如果这有帮助。我从来没有使用HQL,所以我试图从文档中猜测。 – Aushin 2012-07-31 13:54:32

4

只有在两个实体之间存在关联时,HQL中的左连接才有可能。由于您的查询将联接的实体强制为非空,所以内部联接会执行相同的操作。只有在两个实体之间存在关联的情况下,也可以使用连接语法进行内部连接。但是你可以通过简单地在where子句中增加一个平等的测试做到这一点:

select e from Tvshow e, Tvshow e1 
where e.num = e1.num 
and e1.code = '024' 
and e.code is not null 
and e.code != '024' 
+0

使用内部连接语法,行'和e.code不为空'是不必要的。 – 2016-03-09 03:03:26