【发布时间】:2014-07-28 06:19:15
【问题描述】:
我需要动态准备一个查询,如下所示,我在不同的列表中获取组列,在不同的列表中获取主列, 有人可以帮我吗?
SELECT * FROM TABLE WHERE COLUMN_A =1 ? OR (COLUMN_B='A' AND COLUMN_B='Z')
Java 代码:
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()])));
}
上面代码的put是
SELECT * FROM TABLE WHERE COLUMN_A =1 ? AND COLUMN_B='A' AND COLUMN_B='Z'
【问题讨论】:
-
我真的不明白你的代码试图实现什么。我没有看到任何将列与值 1 或值“A”和“Z”进行比较的代码。我看到您尝试创建一个“分组依据”,然后还“和”将分组依据列一起创建(这没有意义)。根据你自己也不明白到底出了什么问题。
标签: jpa criteria-api