Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring数据jpa和多个采集的条件_Java_Spring_Postgresql_Jpa_Spring Data Jpa - Fatal编程技术网

Java spring数据jpa和多个采集的条件

Java spring数据jpa和多个采集的条件,java,spring,postgresql,jpa,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)) "+

我想通过一个所有人都应该匹配的列表

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

最后一个和条件中缺少括号 应该是这样的

@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))")

假设列表不包含重复项,则此查询应提供与所有设备列表匹配的
Gym.id
s

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}    
您可以将它和类似的查询用于
listofamanity
,作为主查询中的子选择

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

“不工作”。我不知道那是什么意思。也许通过查看调用的SQL,您会发现更多?这里没有人看到实体类丢失了什么,因为这不是我最初的查询。但这并不能解决我的问题。因为我不想要
条件,所以我需要
条件
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}   
))