2016-09-13 3 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(); 
    } 

Я мог бы решить, что с несколькими, если либо еще блоков и возвращать результат на основе этого критерия, но существует более 12 различных условий и, следовательно, надежный способ, чтобы просто исключить их, если они являются нулевыми, было бы потрясающе.

Я мог бы также создать много разных методов, но должен быть какой-то более умный способ.

Также условия не должны быть пустым, но может иметь некоторые специфические ценности, что делает их устаревшими в запросе, например:

params1.equals("something"); 

Не включать, потому что «что-то» не будет измените результат поиска в любом случае.

любые предложения?

+1

Посмотрите на это [сообщение] (http://stackoverflow.com/questions/31534272/optional-columns-to-filter-database-records /) – Sivakumar

+0

@ Сивакумар, спасибо, это то, что я ищу. –

ответ

0

Вы можете использовать объект ExpressionList <> возвращаемый find.where() и добавить условия dynamicaly.

например:

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

С наилучшими пожеланиями

Смежные вопросы