我有一个与Entity2有一对多关系的Entity1。 Entity2存储属性并具有“key”和“value”字段。
现在我需要查询具有某些键/值组合(AND逻辑)
的所有Entity1SELECT e1 FROM Entity1 e Join e.props e2
WHERE
e2.key = :key1 and e2.value = :value1
And
e2.key = :key2 and e2.value = :value2 -- wont work
答案 0 :(得分:1)
一种容易推广到更多键/值对的方法是使用条件聚合:
SELECT entity_id
FROM e.props
GROUP BY entity_id
HAVING SUM(CASE WHEN e2.key = :key1 and e2.value = :value1 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN e2.key = :key2 and e2.value = :value2 THEN 1 ELSE 0 END) > 0;
对于更多条件,您只需向having
添加更多子句。
答案 1 :(得分:1)
JPA了解EXISTS:
SELECT e1 FROM Entity1 e1
WHERE exists (select 1 from Entity2 e2
where e2.entity1.id = e1.id
and e2.key = :key1 and e2.value = :value1)
AND exists (select 1 from Entity2 e2
where e2.entity1.id = e1.id
and e2.key = :key2 and e2.value = :value2);
答案 2 :(得分:0)
select e1.*
from entity1 e1
join entity2 e21 on e21.e1_id = e1.id and e21.key = :key1 and e21.value = :value1
join entity2 e22 on e22.e1_id = e1.id and e22.key = :key2 and e22.value = :value2
答案 3 :(得分:0)
使用此
SELECT some_filed FROM Entity1 AS e1 Join e1.props AS p
WHERE
(p.key = :key1 and p.value = :value1)
and
(p.key = :key2 and p.value = :value2);