как создать generi c (тип и атрибут) Spring Jpa Технические характеристики - PullRequest
0 голосов
/ 05 марта 2020

В настоящее время я использую пружинные данные JPA с критериями API. Я создал собственный репозиторий для сущности. Предикаты создаются следующим образом: 2 примера:

public static <E> Predicate matchingCountryOrGroup(CountryCode country, List<String> euGroups,
        SingularAttribute<E, String> countryAttribute,
        SetAttribute<E, String> countryGroupAttribute, Root<E> deliveryMode,
        CriteriaBuilder cb) {
    String countryGroup = country.getCountryGroup();
    Predicate countryGroupMatchPredicate = matchCountryGroup(countryGroup, euGroups, countryGroupAttribute, cb, deliveryMode);

    Predicate countryMatchPredicate = caseInsensitiveStringMatch(country.getCountryId(), countryAttribute, cb,
            deliveryMode);
    Predicate countryPredicate = cb.or(countryGroupMatchPredicate, countryMatchPredicate);
    Predicate bothNull = cb.and(cb.isNull(deliveryMode.get(countryAttribute)),
            cb.isEmpty(deliveryMode.get(countryGroupAttribute)));
    return cb.or(countryPredicate, bothNull);
}

public static <E> Predicate caseInsensitiveStringMatch(String match,
        SingularAttribute<E, String> stringAttribute, CriteriaBuilder cb,
        Root<E> deliveryMode) {
    return cb.equal(cb.lower(deliveryMode.get(stringAttribute)), match.toLowerCase());
}

Я использую эти предикаты в нескольких запросах для разных атрибутов, таким образом, параметр для атрибута и разных сущностей. Что действительно раздражает, так это тот факт, что мне всегда нужно помещать в CriteriaBuilder и Root.

С другой стороны, я увидел API спецификации Spring, который, похоже, решает именно эту проблему, введя правильный root и CriteriaBuilder.

Вопрос: как я могу использовать / использовать этот API спецификации с моими видами предикатов - generi c для разных сущностей и generic c для разных атрибутов?

Обновлены вопрос и код для большей ясности

...