В моем приложении у меня есть несколько сущностей, которые расширены из класса 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));
}
Вот здесь SpecificationBuilder:
public interface SpecificationBuilder<Entity> {
Specification<Entity> getSpecOfSearchParam(String searchParam);
}
Проблема в том, что MetaModel.lastName и MetaModel.firstName подчеркнуты Intellij(он говорит, что "Не удается разрешить метод с ... User.firstName").Может быть, это потому, что не ясно, какое именно расширение класса User мы ожидаем.Может быть, есть способ избежать этого.Заранее спасибо.