traduzione - orm java hibernate




Come si "OR" i criteri insieme quando si utilizza una query di criteri con ibernazione? (4)

Sto cercando di fare un "OR" di base su tre campi usando una query sui criteri di ibernazione.

Esempio

class Whatever{
 string name;
 string address;
 string phoneNumber;
}

Mi piacerebbe creare una query sui criteri in cui la mia stringa di ricerca potrebbe corrispondere a "name" o "address" o "phoneNumber".


Le condizioni possono essere applicate utilizzando o / e in diversi livelli della query utilizzando la disgiunzione

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

Nel caso in cui qualcuno dovesse imbattersi in questo con la stessa domanda per NHibernate:

ICriteria c = session.CreateCriteria(typeof (Whatever))
    .Add(Expression.Disjunction()
        .Add(Expression.Eq("name", searchString))
        .Add(Expression.Eq("address", searchString))
        .Add(Expression.Eq("phoneNumber", searchString)));

Supponendo che tu abbia una sessione di ibernazione a portata di mano, allora qualcosa come il seguente dovrebbe funzionare:

Criteria c = session.createCriteria(Whatever.class);
Disjunction or = Restrictions.disjunction();
or.add(Restrictions.eq("name",searchString));
or.add(Restrictions.eq("address",searchString));
or.add(Restrictions.eq("phoneNumber",searchString));
c.add(or);

    //Expression :  (c1 AND c2) OR (c3)      


     Criteria criteria = session.createCriteria(Employee.class);

      Criterion c1 = Restrictions.like("name", "%e%");
      Criterion c2 = Restrictions.ge("salary", 10000.00);
      Criterion c3 = Restrictions.like("name", "%YYY%");
      Criterion c4 = Restrictions.or(Restrictions.and(c1, c2), c3);
      criteria.add(c4);

// La stessa cosa può essere fatta per (c1 OR c2) AND c3, o qualsiasi espressione complessa.





hibernate