我正在编写用于搜索记录的JPA本机查询。
我有一个表,可以说“机器”,其中包含一个数字列“容量”,用于存储机器的容量,搜索输入可以包含应该过滤机器的容量范围列表。

例如范围列表可以包含


10至20
25至30
32至40


因此,应提取具有上述范围之间的容量的机器。

这是我的本机查询,仅适用于容量范围中的一个元素
如何使其动态化,使其支持多个此类CapacityMin和CapacityMax值。

提前致谢。

    @Query(value = "SELECT * FROM machine m where m.status='A' " +
            "and (:capacityMin IS NULL or (m.capacity>= :capacityMin and m.capacity<= :capacityMax))" , nativeQuery=true)
    public List<Object[]> searchMachines(@Param("capacityMin") Integer capacityMin,@Param("capacityMax") Integer capacityMax);

最佳答案

当您有几个参数时,请使用已找到第一个参数的解决方案的解决方案

@Query(value = "SELECT * FROM machine m where m.status='A' " +
            "and (:capacityMin IS NULL or (m.capacity>= :capacityMin ) " +
            "and (:capacityMax IS NULL or (m.capacity<= :capacityMax )" , nativeQuery=true)
    public List<Object[]> searchMachines(@Param("capacityMin") Integer capacityMin,@Param("capacityMax") Integer capacityMax);


当您有许多可选参数时,可以更好地使用已经提到的Criteria API或QueryDSL

10-06 12:19