簡體   English   中英

通過多個可選參數過濾 api

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM