为了账号安全,请及时绑定邮箱和手机立即绑定

JPA - 对条款和大小写不敏感的特异性

JPA - 对条款和大小写不敏感的特异性

aluckdog 2022-09-14 17:16:29
使用 mysql 和弹簧靴 JPA,我正在尝试使用JPA.在子句中实现参数列表传递给规范时,在编写如下manaul查询时获得预期结果。雇员 Id 是一个字符串列,其中既有大写字母,也有小写字母。虽然手动查询有效,但必须实现规范。手动查询:SELECT empFROM EmployeeEntitiy empWHERE LOWER(emp.employeeIdParam) IN(  SELECT LOWER(empRel.destinationssid)  FROM EmployeeRelationEntity empRel WHERE ((LOWER(empRel.employeeId)=:employeeIdParam                                             OR UPPER(empRel.employeeId)=:employeeIdParam)                                             OR empRel.employeeId=:employeeIdParam)我怎么能检查列数据与大写和小,如手动查询在到预测覆盖方法。公积管规格:private class ParentChildCISpecification implements Specification<EmployeeEntitiy> {    List<String> employeeIdParamsList = new ArrayList<String>();    public ParentChildCISpecification(List<String> employeeIdParamsList) {        this.employeeIdParamsList = employeeIdParamsList;    }    @Override    public Predicate toPredicate(Root<EmployeeEntitiy> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {        return root.get("employeeId").in(employeeIdParamsList);    }}
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

传入小写的字符串列表并使用表达式:CriteriaBuilder.lower


@Override

    public Predicate toPredicate(Root<EmployeeEntitiy> root

        , CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {


        return criteriaBuilder.lower(root.get("employeeId")).in(employeeIdParamsList);


    }


查看完整回答
反对 回复 2022-09-14
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

在相等的情况下,可以使用以下


import org.springframework.data.jpa.domain.Specification;


final Specification<EmployeeEntity> spec = (employeeEntity, cq, cb) -> cb.equal(cb.lower(employeeEntity.get("email")), email.toLowerCase());

final List<EmployeeEntity> empList = employeeRepository.findAll(spec, PageRequest.of(page, size));



查看完整回答
反对 回复 2022-09-14
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

做 -- 你可能会发现 是 而不是 (对于 “不区分大小写”)SHOW CREATE TABLE EmployeeEntitiyCOLLATION...bin...ci



查看完整回答
反对 回复 2022-09-14
  • 3 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信