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

我有以下数据库模型:

Category -< ProductCategory >- Product -< Variant

(类别与产品有多对多的关系,产品与Variant有一对多的关系)

现在我需要获得具有活动变体的产品的所有类别记录.我通过以下JPQL查询获取这些对象:

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

它运作良好 – 准确地返回类别 – 但是每个类别都包含所有产品 – 不仅仅包含活动变体.

如何过滤掉单个查询中不活动的产品(或变体)?

Here是一个带有数据库结构和示例数据的postgres脚本.对于给定的数据,应返回两个类别(CAT 1,CAT 2),两个产品(PROD 1,PROD 2)和三个变体(VAR 1,VAR 2,VAR 3).

最佳答案 我有完全相同的问题,我花了一段时间才弄清楚它是如何工作的.在JOIN之后添加FETCH时应该过滤子列表,如下所示:

SELECT DISTINCT c FROM Category c JOIN FETCH c.products as p join p.variants as pv where pv.active = true
点赞