我在使用JPA标准查询时遇到了问题。如何在Criteria查询中添加多个where子句,同时使用if else语句...
我的要求是:
CriteriaBuilder builder = getEm().getCriteriaBuilder();
CriteriaQuery<Object> query = builder.createQuery(Object.class);
// From
Root<EntityClass> entity= query.from(EntityClass.class);
// Select
query.multiselect(entity.get("id").get("col1"),entity.get("id").get("col2"));
// Where
Predicate p1 = builder.and(builder.equal(entity.get("col3"), value3));
Predicate p2 = builder.and(builder.equal(entity.get("col4"), value4));
Predicate p3 = builder.and(builder.equal(entity.get("col5"), value5));
if(someCondition1){
query.where(p1);
}else if(someCondition2){
query.where(p1);
}
query.where(p3);
在上面的代码中,语句query.where(p3);替换了先前设置的where子句条件p1和p2。我发现的替代方法是像下面这样用连接词:
if(someCondition1){
query.where(p1, p3);
}else if(someCondition2){
query.where(p2, p3);
}else{
query.where(p3);
}
但这不是一个好的方法,因为当有许多if-else时,编写重复代码会变得非常糟糕。是否有人能够提供解决方案呢?