JPA - Спецификация с предложением и без учета регистра - PullRequest
3 голосов
/ 02 апреля 2019

с использованием mysql и springboot jpa,

Я пытаюсь реализовать в предложении, используя JPA. Когда список параметров передается в спецификацию, получайте ожидаемые результаты при написании запроса на управление, как показано ниже.employeeId - это строковый столбец с заглавными и строчными буквами.хотя ручной запрос работает, но необходимо реализовать спецификацию.

Ручной запрос:

SELECT emp
FROM EmployeeEntitiy emp
WHERE 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)

как я могу проверить данные столбца как заглавными, так и маленькими, как ручной запрос в toPredicate переопределенный метод.JPA Спецификация:

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

    }
}

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Передайте список строк в нижнем регистре и используйте выражение CriteriaBuilder.lower:

@Override
    public Predicate toPredicate(Root<EmployeeEntitiy> root
        , CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {

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

    }
0 голосов
/ 09 апреля 2019

Do SHOW CREATE TABLE EmployeeEntitiy - Вы можете обнаружить, что COLLATION равно ...bin вместо ...ci (для "без учета регистра")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...