I need to prepare a query some thing like below dynamically, I am getting group column in a different list and main column in a different list, Can some one help me?
SELECT * FROM TABLE WHERE COLUMN_A =1 ? OR (COLUMN_B='A' AND COLUMN_B='Z')
Java code:
CriteriaBuilder builder;
List<Predicate> predicates = new ArrayList<Predicate>();
List<Predicate> innerPredicates = new ArrayList<Predicate>();
List<Predicate> outerPredicates = new ArrayList<Predicate>();
for(GroupClause gc : list.getGroupClause()){
List<Predicate> groupPredicates = new ArrayList<Predicate>();
groupPredicates.add(gc.getColumnB());
if(groupPredicates!=null && groupPredicates.size()>0){
innerPredicates.add(builder.and(groupPredicates.toArray(new Predicate[groupPredicates.size()])));
}
}
if(outerPredicates.size()>0){
predicates.add(builder.or(outerPredicates.toArray(new Predicate[outerPredicates.size()])));
predicates.add(builder.or(innerPredicates.toArray(new Predicate[innerPredicates.size()])));
}
The put for above code is
SELECT * FROM TABLE WHERE COLUMN_A =1 ? AND COLUMN_B='A' AND COLUMN_B='Z'