【问题标题】:Spring data repository query to retrieve values containing nullSpring 数据存储库查询以检索包含 null 的值
【发布时间】:2018-06-25 16:09:42
【问题描述】:

我有以下用户表和存储库。

用户:

id;name;job;age
1;steve;nurse;33
2;steve;programmer;null
3;steve;programmer;null

存储库方法:

@Query("SELECT u FROM User u WHERE ("
        + "LOWER(u.name) = LOWER(:name) AND "
        + "LOWER(u.beruf) = LOWER(:job) AND "
        + "LOWER(u.alter) = LOWER(:age))")
public List<User> findUsers(@Param("name") String name,
        @Param("job") String job,
        @Param("age") String age);

如果我使用以下参数调用存储库方法

String name = "steve";
String job = "programmer";
List<User> result = repository.findUsers(name, job, null); // empy list ..why ?

我得到一个空列表作为结果,尽管我希望得到 id=2 和 id=3 的实体作为结果。

我做错了什么?我应该如何更改查询以获取两个实体作为结果。

谢谢

【问题讨论】:

  • 首先我不明白为什么年龄是一个字符串而不是一个整数;无论如何..您是否使用 MySQL 客户端尝试查询?

标签: sql spring spring-data-jpa spring-data jpa-criteria


【解决方案1】:

根据文档,这种行为是正常的,没有办法忽略空字段。使用@Query 方法。 相反,您可以使用查询方法规范。 更多信息 [这里][jpa 文档]

如果你想保留你现有的方法,你也可以这样:

@Query("SELECT u FROM User u WHERE ("
            + "LOWER(u.name) = LOWER(:name) AND "
            + "LOWER(u.beruf) = LOWER(:job) AND "
            + "( " +
            "   :age is null or LOWER(u.alter) = LOWER(:age) " +
                ")" 
    )
    public List<User> findUsers(@Param("name") String name,
                                @Param("job") String job,
                                @Param("age") String age);

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多