You need to check the Ebean Junctions function .
There are two types of transitions, conjunctions and disjunctions. With conjunction, you can combine many expressions with AND, and with Disjunction you combine many expressions with OR.
For instance:
Query q = Ebean.createQuery(YourClass.class); q.where().disjunction() .add(Expr.eq("varName1",value).eq("varName2",value)) .add(Expr.eq("varName3",value3)) .add(Expr.eq("varName4",value4).eq("varName5",value5))
generate sql as follows:
SELECT * FROM tablename WHERE (varName1=value and varName2=value) or (varName3=value3) or (varName4=value4 and varName5=value5)
If you need flexibility in choosing a connection type, you can do this:
Query q = Ebean.createQuery(YourClass.class); Junction<YourClass> junction; if("or".equals(desiredJunctionType)){ junction = query.where().disjunction(); } else { junction = query.where().conjunction(); } // then you can add your expressions: junction.add(Expr.eq("varName1",value).eq("varName2",value)); junction.add(Expr.eq("varName3",value3)); // etc... // and finaly get the query results List<YourClass> yourResult = junction.query().findList();
source share