0

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

用户:

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 的实体作为结果。

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

谢谢

4

1 回答 1

0

根据文档,这种行为是正常的,无法忽略空字段。使用@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);
于 2018-06-25T16:24:48.117 回答