春季启动JPA,使用LIKE和NULL字段查询

时间:2019-01-03 11:04:35

标签: java sql-server spring spring-boot

我正在使用Spring-Boot 1.5.10,并将JPA连接到SQL Server 2016。 我确实有一个自定义查询,该查询正在执行LIKE,但是当字段为NULL时,不会返回任何记录:

@Query("SELECT s FROM Speaker s where " +
        "(" +
        "lower(s.lastName) like lower(concat('%', ?1,'%')) " +
        "OR lower(s.firstName) like lower(concat('%', ?1,'%')) " +
        "OR lower(s.biography) like lower(concat('%', ?1,'%'))" +
        ") " +
        "and lower(s.language) like lower(concat('%', ?2,'%')) " +
        "and lower(s.contactType) like lower(concat('%', ?3,'%')) " +
        "and s.fee <= ?4")
Page<Speaker> findByContains(String criteria, String language, String type, int fee, Pageable pageable);

查询连接到REST控制器,其中传递了1个称为criteria的参数,问题是您可能根本不通过任何条件就调用REST控制器。在这种情况下,查询不会返回其中一个搜索条件在数据库中为NULL的记录。

1 个答案:

答案 0 :(得分:2)

您可以使用COALESCE将null转换为空字符串:

lower(COALESCE(s.firstName,''))