2016-11-28 65 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