我有以下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的实体,但结果却是一个空列表。
我做错了什么?我应该如何更改查询以获取两个实体作为结果。
谢谢
答案 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);