【发布时间】:2020-02-22 01:39:15
【问题描述】:
我正在编写一个用于搜索记录的 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);
【问题讨论】:
-
我认为您可以在单个查询中执行此操作的唯一方法是使用 Criteria API 或 QueryDSL 来构建动态“或”子句。否则,您需要为每个范围调用一次查询。
-
谢谢 Alan.. 我希望它在单个查询中,因为它还必须返回带有分页的结果。因此在多个查询的情况下维护起始偏移量、限制和计数会非常复杂。
-
我建议然后看看 QueryDSL。 Spring data 开箱即用地支持它。它为您提供了非常强大的零代码查询功能。 docs.spring.io/spring-data/jpa/docs/current/reference/html/…
-
感谢您的参考我会检查它。
标签: mysql spring-boot jpa spring-data-jpa nativequery