如何在JPQL查询中过滤子集合?

Opa*_*pal 5 java spring jpa jpql spring-data

我有以下数据库模型:

Category -< ProductCategory >- Product -< Variant
Run Code Online (Sandbox Code Playgroud)

(与具有Category多对多关系,Product并且与Product具有一对多关系Variant

现在,我需要获取所有Category具有有效变体产品的记录。我通过以下JPQL查询获取这些对象:

@Query("select distinct c from Category c join c.products as p join p.variants as pv where pv.active = true")
Run Code Online (Sandbox Code Playgroud)

它运作良好-准确地返回类别-但是每个类别都Category包含所有产品- 不仅是具有有效变体的产品。

如何过滤掉在单个查询中无效的产品(或变体)?

是一个Postgres脚本,其中包含数据库结构和示例数据。对于给定的数据,应该返回两个类别(CAT 1CAT 2),两个乘积(PROD 1PROD 2)和三个变体(VAR 1VAR 2VAR 3)。

ezt*_*tam 10

我遇到了完全相同的问题,我花了一段时间才弄清楚这是如何工作的。当FETCHJOIN像这样添加时,应过滤子列表:

SELECT DISTINCT c FROM Category c JOIN FETCH c.products as p join p.variants as pv where pv.active = true
Run Code Online (Sandbox Code Playgroud)