Выполните следующие шаги:
Шаг-1.0: Создание критериев запроса
Criteria myQueryCrit = session.createCriteria(XYZ.class, "xyz");
Шаг-2.0: Для обработки ИЛИ условий запроса:
2.1) Сначалавам нужно создать объект Disjunction, скажем, myQueryDisjunc.
Disjunction myQueryDisjunc = Restrictions.disjunction();
2.2) Затем создайте объекты All OR Criterion.Например:
Criterion xyzName = Restrictions.ilike("xyz.name", "%"+searchStr1+"%", MatchMode.ANYWHERE);
Criterion xyzSpeciality = Restrictions.ilike("xyz.specs", "%"+searchStr1+"%", MatchMode.ANYWHERE);
Criterion xyzServices = Restrictions.ilike("xyz.services", "%"+searchStr1+"%", MatchMode.ANYWHERE);
2.3) Добавление всех объектов ИЛИ-Критериев в myQueryDisjunc
myQueryDisjunc.add(xyzName);
myQueryDisjunc.add(xyzSpeciality);
myQueryDisjunc.add(xyzServices);
Шаг-3.0: Для обработки И условий запроса:
3.1) Сначала вынеобходимо создать объект Conjunction, скажем, myQueryConjunc.
Conjunction myQueryConjunc = Restrictions.conjunction();
3.2) Затем создать объекты All AND Criterion.Например:
Criterion xyzLoc = Restrictions.ilike("xyz.locStr", "%"+searchStr2+"%", MatchMode.ANYWHERE);
Criterion xyzZip = Restrictions.ilike("xyz.zipStr", "%"+searchStr3+"%", MatchMode.ANYWHERE);
3.3) Добавление всех объектов AND Criterions в myQueryConjunc
myQueryConjunc.add(xyzLoc);
myQueryConjunc.add(xyzZip);
Step-4.0: Теперь добавьте myQueryDisjunc, myQueryConjunc в myQueryCrit:
myQueryCrit.add(myQueryDisjunc);
myQueryCrit.add(myQueryConjunc);
Шаг-5.0: Теперь добавьте любой результат Trnasformer, если необходимо [необязательно]:
myQueryCrit.setResultTransformer(
CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Шаг-6.0: Выполните myQueryCrit, вызвав для него list ().
List <myObj> allResults = myQueryCrit.list();
Шаг-7.0: вот и все.