2016-11-28 35 views
4

我下面的DB模式:如何筛选JPQL查询中的子集合?

Category -<ProductCategory>- Product -< Variant 

Category有许多一对多与ProductProduct关系与Variant一个一对多的关系)

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

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

它运作良好 - 精确返回类别 - 但是每一个Category包含所有产品 - 不仅这些与活跃变种。

如何过滤在单个查询中处于非活动状态的产品(或变体)?

Here是一个带数据库结构和样本数据的postgres脚本。对于给定的数据两类(CAT 1CAT 2),两种产品(PROD 1PROD 2)和三个变体(VAR 1VAR 2VAR 3)应被退回。

回答

1

我有完全相同的问题,并花了我一段时间才发现这是如何工作的。当您在您的JOIN之后加FETCH后,子列表应该被过滤如下:

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