[英]Filter api by multiple optional parameters
我正在尝试使用多个可选参数来过滤存储库方法。 但我没有得到预期的结果。 这是我的查询。
这里访客实体包含多次访问,一次访问可以有一个联系人和一个时间段。
谢谢您的帮助
@Query("select v from Visitor v join v.visits visits join visits.contactPerson cp where "
+ "v.firstName=:firstName or :firstName is NULL or :firstName = '' and "
+ "visits.approvalStatus=:approvalStatus or :approvalStatus is NULL or :approvalStatus = '' "
+ "and cp.firstName=:firstName or :firstName is NULL or :firstName = '' ")
public List<Visitor> findByFilter(@Param("firstName") String firstName,
@Param("approvalStatus") String approvalStatus, @Param("firstName") String fName);
您需要添加括号以使数据库按照您的意图理解您的查询:
+ "(v.firstName=:firstName or :firstName is NULL or :firstName = '') and "
+ "(visits.approvalStatus=:approvalStatus or :approvalStatus is NULL or :approvalStatus = '') "
+ "and (cp.firstName=:firstName or :firstName is NULL or :firstName = '')"
OR 运算符的优先级低于 AND,因此a OR b AND c OR d
被解析为a OR (b AND c) OR d
,而不是(a OR b) AND (c OR d)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.