2016-09-13 59 views
0

我收到了一個搜索應用程序,其中許多條件被組合成'和''或'列表。如何在Ebean查詢中動態地包含表達式?

根據用戶輸入,其中一些可以爲空,如果這些值爲空,則不應考慮這些值。

例如:

public static PagedList<Profile> exampleForSO(String param1, String params2, Integer number, Double d, Boolean condition1, Boolean condition2) { 

     return find.where().ieq("param1", param1). 
       ieq("param2", params2). 
       eq("number", number). 
       // based on the fact if condition1 is null include an eq("condition", condition1); block 
       // based on the fact if condition2 is null include an eq("condition", condition1); block 
      // if param1.equals("test") create an expression .eq("param1", param1). 

     findPagedList(); 
    } 

我大概可以解決的幾個,如果else塊,並返回結果基於該標準,但有超過12個不同的條件,因此堅實的方式,如果只是它們排除在外他們是空的將是真棒。

我也可以創建許多不同的方法,但必須有一些更聰明的方法。

而且在條件不具備爲空,但可以有,使他們在查詢中過時的一些特定的值,例如:

params1.equals("something"); 

不包括它,因爲「東西」不會無論如何改變搜索結果。

有什麼建議嗎?

+1

看一看這個[文章](http://stackoverflow.com/questions/31534272/optional-columns-to-filter-database-records /) – Sivakumar

+0

@Sivakumar,謝謝你,這就是我要找的。 –

回答

0

您可以使用對象表達式列表<>通過find.where()返回和dynamicaly添加條件。

如:

 ExpressionList<Profile> expressionList = find.where(); 
     expressionList.ieq("param1", param1); 
     expressionList.eq("param2", param2); 
     if(condition1){ 
      expressionList.eq("...", ...); 
     } 
     if(condition2){ 
      expressionList.ieq("...", ...); 
     } 

問候