我正在编写用于搜索记录的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