如何在JPQL中使用相同的表两次连接?

时间:2016-09-21 16:12:14

标签: java hibernate jpa

我在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 个答案:

答案 0 :(得分:1)

假设Asset具有名为assetId的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)