Las condiciones se pueden aplicar mediante el o/y en diferentes niveles de la consulta usando disyunción
Criteria query = getCriteria("ENTITY_NAME");
query.add(Restrictions.ne("column Name", current _value));
Disjunction disjunction = Restrictions.disjunction();
if (param_1 != null)
disjunction.add(Restrictions.or(Restrictions.eq("column Name", param1)));
if (param_2 != null)
disjunction.add(Restrictions.or(Restrictions.eq("column Name", param_2)));
if (param_3 != null)
disjunction.add(Restrictions.or(Restrictions.eq("column Name", param_3)));
if (param_4 != null && param_5 != null)
disjunction.add(Restrictions.or(Restrictions.and(Restrictions.eq("column Name", param_4), Restrictions.eq("column Name", param_5))));
if (disjunction.conditions() != null && disjunction.conditions().iterator().hasNext())
query.add(Restrictions.and(disjunction));
return query.list();
Eso es perfecto, gracias! Finalmente encontré un ejemplo en línea, pero me alegra que esté aquí para futuras referencias. – ScArcher2
¿Qué pasa si quiero '(name = x AND address = y) O (phoneNumber = z)'? –