J’essaie de faire un “OR” de base sur trois champs en utilisant une requête de critères d’hibernation.
Exemple
class Whatever{ ssortingng name; ssortingng address; ssortingng phoneNumber; }
Je voudrais construire une requête de critères où ma chaîne de recherche pourrait correspondre à “name” ou “address” ou “phoneNumber”.
Vous voulez utiliser Ressortingctions.disjuntion()
. Ainsi
session.createCriteria(Whatever.class) .add(Ressortingctions.disjunction() .add(Ressortingctions.eq("name", querySsortingng)) .add(Ressortingctions.eq("address", querySsortingng)) .add(Ressortingctions.eq("phoneNumber", querySsortingng)) );
Voir le doc Hibernate ici .
En supposant que vous ayez une session d’hibernation à scope de main, alors quelque chose comme ceci devrait fonctionner:
Criteria c = session.createCriteria(Whatever.class); Disjunction or = Ressortingctions.disjunction(); or.add(Ressortingctions.eq("name",searchSsortingng)); or.add(Ressortingctions.eq("address",searchSsortingng)); or.add(Ressortingctions.eq("phoneNumber",searchSsortingng)); c.add(or);
//Expression : (c1 AND c2) OR (c3) Criteria criteria = session.createCriteria(Employee.class); Criterion c1 = Ressortingctions.like("name", "%e%"); Criterion c2 = Ressortingctions.ge("salary", 10000.00); Criterion c3 = Ressortingctions.like("name", "%YYY%"); Criterion c4 = Ressortingctions.or(Ressortingctions.and(c1, c2), c3); criteria.add(c4);
// La même chose peut être faite pour (c1 OR c2) AND c3, ou toute expression complexe.
//Expression : (c1 AND c2) OR (c3) Criteria criteria = session.createCriteria(Employee.class); Criterion c1 = Ressortingctions.like("name", "%e%"); Criterion c2 = Ressortingctions.ge("salary", 10000.00); Criterion c3 = Ressortingctions.like("name", "%YYY%"); Criterion c4 = Ressortingctions.or(Ressortingctions.and(c1, c2), c3); criteria.add(c4); //Same thing can be done for (c1 OR c2) AND c3, or any complex expression.
Juste au cas où quelqu’un devrait tomber sur cela avec la même question pour NHibernate:
ICriteria c = session.CreateCriteria(typeof (Whatever)) .Add(Expression.Disjunction() .Add(Expression.Eq("name", searchSsortingng)) .Add(Expression.Eq("address", searchSsortingng)) .Add(Expression.Eq("phoneNumber", searchSsortingng)));
Les conditions peuvent être appliquées en utilisant le ou / et dans différents niveaux de la requête en utilisant la disjonction
Criteria query = getCriteria("ENTITY_NAME"); query.add(Ressortingctions.ne("column Name", current _value)); Disjunction disjunction = Ressortingctions.disjunction(); if (param_1 != null) disjunction.add(Ressortingctions.or(Ressortingctions.eq("column Name", param1))); if (param_2 != null) disjunction.add(Ressortingctions.or(Ressortingctions.eq("column Name", param_2))); if (param_3 != null) disjunction.add(Ressortingctions.or(Ressortingctions.eq("column Name", param_3))); if (param_4 != null && param_5 != null) disjunction.add(Ressortingctions.or(Ressortingctions.and(Ressortingctions.eq("column Name", param_4 ), Ressortingctions.eq("column Name", param_5 )))); if (disjunction.conditions() != null && disjunction.conditions().iterator().hasNext()) query.add(Ressortingctions.and(disjunction)); return query.list();