HQL嵌套子查询

时间:2014-01-04 10:55:47

标签: java hibernate hql

我有这样的域名:国家有城市,城市有办事处,办事处有服务。我需要找到所有提供指定服务ID的办事处的国家/地区。我目前的版本是:

SELECT c FROM Country c 
WHERE EXISTS(
             SELECT ct FROM c.cities ct 
             WHERE EXISTS(
                          SELECT o FROM ct.offices o 
                          WHERE EXISTS(
                                       SELECT s.id FROM o.services s 
                                       WHERE s.id = :id
                                      )
                         ) 
            )

所以,我是HQL的新手。什么是最好的方法?我的版本好吗?我也在考虑SELECT DISTINCTLEFT JOIN

1 个答案:

答案 0 :(得分:2)

我认为您的查询没有任何问题,但这可能更具可读性。

SELECT c FROM Country
WHERE EXISTS (
    SELECT s.id FROM
    c.cities ct
    JOIN ct.offices o
    JOIN o.services s
    WHERE s.id = :id
)