2016-09-21 61 views
1

我在JPQL中有兩個與實體連接的查詢。我需要獲取兩個結果中的資產(即,使用同一個表連接兩次)。如何使用JPQL中的同一個表連接兩次?

第一個查詢給了我,有一定的物業資產的清單:

select distinct(a) from Asset a join a.properties p where p.name = :name 

第二個查詢給我的資產清單,而我有機會獲得:

select distinct(assets) from Asset assets inner join assets.groups assetgroups inner join assetgroups.permissions permissions inner join permissions.usrGroups usergroups with usergroups.id in :groups 

我會需要我有權訪問的資產列表以及該資產的名稱。我使用Hibernate作爲JPA後端。我嘗試了幾個選項,但迄今爲止都不成功。我該怎麼做?

謝謝

回答

1

假設,命名爲assetIdAsset有id字段這應該工作:

select asset from Asset asset 
WHERE asset.assetId in (select distinct(a.assetId) from Asset a join a.properties p where p.name = :name) 
AND asset.assetId in (select distinct(a.assetId) from Asset a inner join a.groups assetgroups inner join assetgroups.permissions permissions inner join permissions.usrGroups usergroups with usergroups.id in :groups) 
+0

THIS!謝謝。我喜歡這個解決方案實際上很簡單並且合理。剛剛嘗試過,它完美運行。它也轉換爲只有一個SQL查詢。 – Calabacin

+0

爲了討論:UNION是否也能工作?如果是這樣,這個解決方案會比使用UNION更好嗎? – Calabacin