java - Spring-boot JPA,使用 LIKE 和 NULL 字段查询
问题描述
我正在使用 Spring-Boot 1.5.10 和连接到 SQL Server 2016 的 JPA。我确实有一个正在执行 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);
Query 连接到一个 REST 控制器,其中传递了 1 个参数criteria
,问题是您可能会调用 REST 控制器而根本没有传递任何条件。在这种情况下,查询不会返回其中一个搜索条件在数据库中为 NULL 的记录。
解决方案
您可以使用 COALESCE 将 null 转换为 emtpy 字符串:
lower(COALESCE(s.firstName,''))
等等
推荐阅读
- javascript - 使用 Puppeteer,您将如何从网站上抓取标题和图像,并将它们放在同一个对象中,以便图像与标题相关?
- r - 闪亮,无法选择所选数据集的变量
- python - 将缩放和 pca 应用于 ColumnTransformer 中的列子集
- discord - Discordjs 层次结构权限
- google-cloud-platform - 谷歌云笔记本虚拟机 - 高内存机器,内存错误导致内核崩溃
- javascript - 为什么即使所有网格元素都使用 fr 调整大小,网格的右侧和底部仍有空白?
- android - 如何知道您何时因为返回按钮而返回活动?
- c# - C# ASP.NET:使用验证显示错误消息
- r - 如何更新单元格数据中特定位置的值
- r - Shiny中的和弦网络覆盖自身