Spring数据存储库查询以检索包含null的值

时间:2018-06-25 16:09:42

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

我有以下User表和存储库。

用户:

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的实体,但结果却是一个空列表。

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

如果要保留现有方法,也可以这样:

@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);