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;
其中 fam
、name
、otch
是列名称。
并这样使用
Predicate predicate = criteriaBuilder.like(teacherRoot.get("fullName"),"%" + str + "%");
如何连接 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;
其中 fam
、name
、otch
是列名称。
并这样使用
Predicate predicate = criteriaBuilder.like(teacherRoot.get("fullName"),"%" + str + "%");