[英]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.