Java HQL嵌套子查询

Java HQL嵌套子查询,java,hibernate,hql,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

我有这样的领域:国家有城市,城市有办公室,办公室有服务。我需要查找所有具有提供指定服务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的新手。最好的方法是什么?我的版本可以吗?我也在考虑使用
左连接
选择DISTINCT

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

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
)