2016-09-21 6 views
1

JPQLにエンティティと結合する2つのクエリがあります。両方の結果に含まれるアセットを取得する必要があります(つまり、同じ表を2回使用して結合する)。JPQLで同じテーブルで2回joinを使用するにはどうすればよいですか?

最初のクエリは私に特定の性質を持っている資産のリストを与える:

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

2番目のクエリは、私がアクセス権を持っている資産のリストを与える:

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 

私は考え私がアクセス権を持っているアセットのリストとそのプロパティ名が必要です。私はJPAバックエンドとしてHibernateを使用しています。私はいくつかの選択肢を試しましたが、これまでに失敗しました。どうしたらいいですか?

答えて

1

Assetは、idフィールドassetIdこれを指名したことを、と仮定ありがとうござい動作するはずです:

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を!ありがとうございました。私は解決策が実際どのように単純で理にかなっているのが好きです。ちょうどそれを試して、それは完全に働いた。また、1つのSQLクエリに変換されます。 – Calabacin

+0

議論のために:UNIONも機能しますか?もしそうなら、このソリューションはUNIONよりも優れていますか? – Calabacin

関連する問題