Criteria API 连接 3 个字段值

Criteria API concat 3 fields value

如何连接 3 个字段?我想通过输入字符串进行搜索。像

这样的表达式

%firstName%LastName%Patr%

可能有不同的顺序 %LastName%Patr%firstName% 等

我该怎么做?

我的代码只搜索一个字段,但我需要同时搜索 3 个字段

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

        Expression concatForOtch = criteriaBuilder.concat(teacherRoot.get("otch"),"%");

        Expression concatForName = criteriaBuilder.concat(teacherRoot.get("name"),"%");

        Expression concatForFam = criteriaBuilder.concat(teacherRoot.get("fam"),"%");

        Expression almostFinalExpression = criteriaBuilder.concat(concatForName,concatForOtch);

        Expression finalExpression = criteriaBuilder.concat(concatForFam,almostFinalExpression);

        Expression fullExpression = criteriaBuilder.concat("%", finalExpression);

        Predicate pr = criteriaBuilder.like(fullExpression,"%" + str + "%");

        criteriaQuery.where(pr);

        return em.createQuery(criteriaQuery).getResultList();

    }

您可以将带有 @Formula 注释的字段添加到实体

@Formula("concat(fam, name, otch)")
private String fullName;

其中 famnameotch 是列名称。

并这样使用

Predicate predicate  = criteriaBuilder.like(teacherRoot.get("fullName"),"%" + str + "%");