【问题标题】:JPQL - if parameter is null, then allJPQL - 如果参数为空,那么所有
【发布时间】:2019-12-24 21:37:43
【问题描述】:

JPQL 中是否有可能返回所有结果并忽略参数中的空值而不是查找空值?

例如:

@Query("SELECT p FROM PromoCode p " +
            "WHERE (LOWER(p.name) LIKE LOWER(concat('%', concat(:query, '%'))) OR " +
            "LOWER(p.promoCode) LIKE LOWER(concat('%', concat(:query, '%')))) AND p.type = :type")
Page<PromoCode> search(@Param("query") String query, @Param("type") PromoCode.Type type, Pageable pageable)

如果:type 为空,我如何忽略它?

【问题讨论】:

    标签: java spring spring-boot jpa jpql


    【解决方案1】:

    您最需要的是在自定义存储库中构建的CriteriaQuery。它专为您的需要而设计,根据各种因素构建查询。

    如果您真的想坚持使用@Query,您可以随时通过这种方式将该部分设为可选:

    AND (p.type = :type OR :type is null)
    

    当有更多这样的参数时,问题开始浮出水面。您的查询将难以维护和理解。

    【讨论】:

    • 您编写的代码不是获取 type == null 的行吗?如果类型为空,我需要获取类型列中包含任何值的行
    • 如果 :type 存在,它会获取它.. 如果不存在.. 它会获取所有行
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2020-09-03
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多