如何解决通过多个可选参数过滤API
我正在尝试使用多个可选参数来过滤存储库方法。但是我没有得到预期的结果。 这是我的查询。
这里的访问者实体包含多次访问,一次访问可以有一个联系人和一个时隙。
感谢您的帮助
@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);
解决方法
您需要添加括号以使数据库以您希望的方式理解您的查询:
g.V(node_id).repeat(bothE().otherV().simplePath()).emit()
OR运算符的优先级低于AND运算符,因此 + "(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 = '')"
被解析为a OR b AND c OR d
,而不是a OR (b AND c) OR d
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。