У меня есть этот метод. Но он ищет во входной строке только одно поле. Но я хочу искать во всем. Например,
строка ввода: Jack Jackson Peter
Записи:
1 Jack Jackson Peter 05.11.1990
2 John Johnson James 095.03.1982
Ожидаемые результаты:
1 Jack Jackson Peter 05.11.1990
Я думаю, что могу использовать"conunction ()" или "and", но что мне делать с входной строкой? Как выполнить эту вещь? Как мне изменить это, чтобы достичь цели?
@Override
public List<Teacher> searchByString(String str) {
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Teacher> criteriaQuery = criteriaBuilder.createQuery(Teacher.class);
Root<Teacher> teacherRoot = criteriaQuery.from(Teacher.class);
Predicate predicateForName
= criteriaBuilder.like(criteriaBuilder.lower(teacherRoot.get("name")), "%" + str.toLowerCase() + "%");
Predicate predicateForFam
= criteriaBuilder.like(criteriaBuilder.lower(teacherRoot.get("fam")), "%" + str.toLowerCase() + "%");
Predicate predicateForOtch
= criteriaBuilder.like(criteriaBuilder.lower(teacherRoot.get("otch")), "%" + str.toLowerCase() + "%");
Predicate predicateFinal = criteriaBuilder.or(
predicateForName,
predicateForFam,
predicateForOtch);
criteriaQuery.orderBy(criteriaBuilder.desc(teacherRoot.get("id")));
return em.createQuery(criteriaQuery).getResultList();
}