如何将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();
}
答案 0 :(得分:1)
您可以将标有@Formula的字段添加到实体
@Formula("concat(fam, name, otch)")
private String fullName;
其中fam
,name
,otch
是列名。
并以这种方式使用
Predicate predicate = criteriaBuilder.like(teacherRoot.get("fullName"),"%" + str + "%");