Criteria API concat 3个字段的值

时间:2019-10-22 05:54:07

标签: hibernate jpa concat criteria-api

如何将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();

    }

1 个答案:

答案 0 :(得分:1)

您可以将标有@Formula的字段添加到实体

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

其中famnameotch是列名。

并以这种方式使用

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