JPQL - 如果参数为空,则所有
JPQL - if parameter is null, then all
JPQL 是否有可能 return 所有结果并忽略参数中的空值而不是查找空值?
例如:
@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
为空,我如何忽略它?
您最可能需要的是 CriteriaQuery
内置在自定义存储库中。它专为您的需要而设计,根据各种因素构建查询。
如果你真的想坚持使用 @Query
你总是可以通过这种方式将那部分设为可选:
AND (p.type = :type OR :type is null)
当有更多这样的参数时,问题开始浮出水面。您的查询将难以维护和理解。
JPQL 是否有可能 return 所有结果并忽略参数中的空值而不是查找空值?
例如:
@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
为空,我如何忽略它?
您最可能需要的是 CriteriaQuery
内置在自定义存储库中。它专为您的需要而设计,根据各种因素构建查询。
如果你真的想坚持使用 @Query
你总是可以通过这种方式将那部分设为可选:
AND (p.type = :type OR :type is null)
当有更多这样的参数时,问题开始浮出水面。您的查询将难以维护和理解。