Comment pouvez-vous “OR” critères ensemble lors de l’utilisation d’une requête de critères avec mise en veille prolongée?

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();