java - Spring-boot JPA,使用 LIKE 和 NULL 字段进行查询

标签 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 Controller ,其中传递了 1 个名为 criteria 的参数,问题是您可能根本不传递任何条件就调用 REST Controller 。在这种情况下,查询不会返回数据库中搜索条件之一为 NULL 的记录。

最佳答案

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

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

以太坊

关于java - Spring-boot JPA,使用 LIKE 和 NULL 字段进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54021063/

相关文章:

sql - 从 PIVOT 获得结果后进行 GROUP BY

spring - 为什么我无法使用 Hibernate 5\Spring Data JPA 将数据类型为 "point"的数据库字段检索到这个 Spring Boot 项目中?

java - wsdl Url中 ".wsdl"和 "?wsdl"的区别

java - 膨胀 View 后无法以编程方式设置约束

对部分列数据进行 SQL 联接 (SQL Server)

java - @AuthenticationPrincipal 返回空用户

java - 保护 apache CXF REST 和 SOAP 服务并在代码中检索权限

java - Java 模式匹配器

java - 替换文本边界内的表达式

java - 使用PreparedStatements时SQL Server死锁