Наследование с метамоделью Java

В моем приложении у меня есть несколько сущностей, которые расширены из класса User. Пользователь имеет поля firstName и lastName. Существует поиск для каждой сущности, расширенной от пользователя. Для осуществления поиска я использую Criteria API. Поскольку мы говорим об одних и тех же параметрах, запросы к ним выглядят очень похоже. Поэтому я решил создать общий класс, чтобы собрать все в одном месте

public abstract class NameSpecificationManager<Entity, SearchDto extends BasicSearchDto, MetaModel extends User_>
    extends SpecificationManager<Entity, SearchDto> {

    protected final SpecificationBuilder<Entity> entityByFirstName = (final String firstName) ->
        (root, query, cb) -> cb.like(root.get(MetaModel.firstName), getParameterPattern(firstName));

    protected final SpecificationBuilder<Entity> entityByLastName = (final String lastName) ->
        (root, query, cb) -> cb.like(root.get(MetaModel.lastName), getParameterPattern(lastName));

}

Вот спецификация строителя:

 public interface SpecificationBuilder<Entity> {
     Specification<Entity> getSpecOfSearchParam(String searchParam);
 }

Проблема в том, что MetaModel.lastName и MetaModel.firstName подчеркнуты Intellij (он говорит, что "Невозможно разрешить метод с...User.firstName"). Возможно, это потому, что не ясно, какое именно расширение класса User мы ожидаем. Может быть, есть способ избежать этого. Заранее спасибо.

0 ответов

Другие вопросы по тегам