簡體   English   中英

彈簧數據jpa和多次收集的條件

[英]spring data jpa and condition for multiple collection

我想傳遞一個列表,其中所有應該匹配。

  @Query("select g.name as name FROM Gym  g  " +
            "LEFT JOIN g.listOfEquipment   listOfEquipment  " +
            "WHERE " +
            "(((:listOfEquipment) is null) or listOfEquipment.id in (:listOfEquipment)) "+
            "AND (((:listOfAmenity) is null) or listOfAmenity.id in (:listOfAmenity))")
  Page<Map<String, Object>> listing(@Param("listOfEquipment") Set<Integer> listOfEquipment,@Param("listOfAmenity") Set<Integer> listOfAmenity)

以上查詢為OR工作,但我需要AND

假設我正在通過1,2,3那么結果應該是所有gym設備1 and 2 and 3同樣的舒適性

我嘗試使用包含jpql的給定集合的所有元素的集合查找項目

但它沒有幫助我,因為有多個過濾器

網址是

http://localhost:8080/filter?listOfEquipment=5,3&listOfAmenity=51,13&sort=name

假設列表不包含重復項,此查詢應該為您Gym.id匹配所有listOfEquipment

select g.id as name 
FROM Gym  g 
LEFT JOIN g.listOfEquipment listOfEquipment
WHERE listOfEquipment.id in (:listOfEquipment)) 
GROUP BY g.id
HAVING count(g.id) = #{#listOfEquipment.size}    

您可以使用它和listOfAmenity的類似查詢作為主查詢中的子選擇。

select g.name as name 
FROM Gym  g 
LEFT JOIN g.listOfEquipment listOfEquipment 
WHERE (((:listOfEquipment) is null) 
    OR g.id in (
    select g.id as name 
    FROM Gym  g 
    LEFT JOIN g.listOfEquipment listOfEquipment
    WHERE listOfEquipment.id in (:listOfEquipment)) 
    GROUP BY g.id
    HAVING count(g.id) = #{#listOfEquipment.size}   
)) 
AND (((:listOfAmenity) is null) 
    OR g.id in (
    select g.id as name 
    FROM Gym  g 
    LEFT JOIN g.listOfAmenity listOfAmenity
    WHERE listOfAmenity.id in (:listOfAmenity)) 
    GROUP BY g.id
    HAVING count(g.id) = #{#listOfAmenity.size}   
))

在最后的AND條件中有一個缺少的括號,它應該如下

@Query("select g.name as name FROM Gym  g  " +
        "LEFT JOIN g.listOfEquipment   listOfEquipment  " +
        "WHERE " +
        "(((:listOfEquipment) is null) or listOfEquipment.id in        (:listOfEquipment)) "+
        "AND (((:listOfAmenity) is null) or listOfAmenity.id in (:listOfAmenity))")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM