繁体   English   中英

Spring 使用可选空值和不区分大小写的查询

[英]Spring Query with optional nulls and case insensitive

我正在使用 Spring Boot 2.2.5.RELEASE 和 Java 8 和 PostgreSQL,我需要从表中检索一些数据。 为此,我可以接收一些可选值,它们需要区分大小写(主要是因为其中一些是十六进制字符串)。 为了处理这个问题,我使用了一个带有查询的 CRUD 存储库,如下例所示:

@Repository
public interface MyRepository extends CrudRepository<MyStuff, String> {

    @Query("SELECT s FROM Stuff s WHERE (:name is null or upper(s.name) = upper(:name)) "
            + "and (:age is null or upper(s.age) = upper(:age)) "
            + "and (:status is null or upper(s.status) = upper(:status))")
    List<MyStuff> findStuff(@Param("name") String name,
                            @Param("age") String age,
                            @Param("status") String status);

我已经删除了一些信息以使其清楚,但它的要点就在那里。 问题是,只有一个字段必须有值,其他字段可以是 null。 它应该很简单,因为我在将字段转换为大写之前检查了 null,但是当我尝试运行它时出现错误,因为 null 值被解释为bytea ,因此没有方法可以更改其案子。 如果没有 java 中的方法来检查空值并在 Java 端更改为大写,我该如何处理它?

我不建议你这样做。 遇到类似情况时,DBMS 将使用相当保守的查询计划。 对于这样的条件过滤器,您应该使用 Spring-Data 规范。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM