Как сделать Criteria API Search по полному имени (несколько параметров)? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть этот метод. Но он ищет во входной строке только одно поле. Но я хочу искать во всем. Например,

строка ввода: 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();

    }
...