[英]Dynamic where clause for Spring Data JPA native query
我的 Hibernate orm.xml
中有一个相当大的本机查询。 我不能轻易地将它翻译成 HQL 或 Criterias,但我想在这个查询中有一个动态的 where。
似乎 TypedQueries 不是一个好主意,因为 SQL 注入,谓词不能与本机查询结合,那么有什么替代方法来创建动态 where 子句?
我必须构建的动态是与范围( between
)、列表( in
查询中等)相关的东西。我希望创建一个谓词并将其注入我的查询中,但没有这样的运气。
这是我的 Spring 数据 JPA 界面的样子:
@Query(nativeQuery = true)
fun findNearby(
@Param("latitude") lat: Double,
@Param("longitude") lon: Double,
pageable: Pageable,
@Param("minPopulation") minPop: Int?,
@Param("maxPopulation") maxPop: Int?,
@Param("houseType") type: List<HouseType>?
): Page<AreaSummary>
理想情况下,我想将population
和housetype
成一个 DTO 并将其提供给查询,但我很乐意考虑任何可行的解决方案。
使用本机查询,您无能为力来支持动态 where 子句。 您可以做的最好的事情是尝试调整本机查询以支持将 null 作为参数值传递,但如果您在该表中有大量数据,我强烈建议您不要这样做,因为过于通用的查询计划通常会导致非常错误的行估计会导致错误的物理查询计划。
IMO 你有两到三个选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.