2017-07-24 66 views
1

如果token爲空而沒有重複查詢,是否可以忽略cb.equal(myClass.get(MyClass_.token), token)?如果完全重複查詢(只跳過一個條件),我不想將它打包成很大。如果函數的參數爲​​空,則排除查詢條件

private MyClass find(String code, String token) { 
    CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class); 
    Root<MyClass> myClass = cq.from(MyClass.class); 
    cq.select(myClass).where(
      cb.and(cb.equal(myClass.get(MyClass_.code), code), 
        cb.equal(myClass.get(MyClass_.token), token), 
        cb.greaterThan(myClass.get(MyClass_.expirationDate), DateUtils.getTime()) 
      )); 
    .... 
} 

回答

1

做下面的事情。注意我只是編輯了你的代碼,並沒有真正檢查語法錯誤或編譯它

private MyClass find(String code, String token) { 
    CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class); 
    Root<MyClass> myClass = cq.from(MyClass.class); 
    Predicate predicate = cb.and(
      cb.equal(myClass.get(MyClass_.code), code), 
      cb.greaterThan(myClass.get(MyClass_.expirationDate), DateUtils.getTime()) 
    ); 
    if (token != null) 
     predicate = cb.and(predicate, cb.equal(myClass.get(MyClass_.token), token)); 

    cq.select(myClass).where(predicate); 
}