2016-09-21 55 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