Je suis confronté à un problème de requête de critères JPA. Comment puis-je ajouter plusieurs clause where dans mes critères de requête avec si d'autre ...Clause conditionnelle Where dans la requête de critères JPA
Mon exigence est:
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);
Dans le code ci-dessus la déclaration query.where (p3); remplace la condition de clause where définie précédemment p1 et p2. Ce que l'autre, j'ai trouvé est en conjonction avec comme ci-dessous
if(someCondition1){
query.where(p1, p3);
}else if(someCondition2){
query.where(p2, p3);
}else{
query.where(p3);
}
Mais ce n'est pas une bonne approche, parce que quand il y a beaucoup de si-else cela devient très mal à écrire des codes de répétition. Quelqu'un peut-il avoir une solution pour cela?
Bonne approche merci! – Furkan