java - spring data jpa 和多个集合的条件

标签 java spring postgresql jpa spring-data-jpa

我想传递一个列表,其中所有内容都应该匹配。

  @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 那么结果应该是所有拥有设备 1 and 2 and 3gym 设施也一样

我试过了 Finding items with a set containing all elements of a given set with jpql

但它对我没有帮助,因为有多个过滤器

网址是

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

最佳答案

假设列表不包含重复项,此查询应为您提供匹配所有 listOfEquipmentGym.id

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}   
))

关于java - spring data jpa 和多个集合的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47365473/

相关文章:

java - 如何使用 SWT 访问网络摄像头

java - Spring Data Elasticsearch不会将空值写入插入的文档

java - DelegatingFilterProxy 的单独 Spring 上下文

sql - 在单个查询中设置和选择?

PostgreSQL - 更新查询中的语法错误

sql - 连接表时删除重复项

java - 使用固定索引获取列?

java - 为什么 android.os.Bundle 是最终类?

java - 尝试复制具有指定扩展名的指定路径中的文件并用新扩展名替换它们

java - 如何在web.xml中配置swagger