私のアプリケーションには、 User クラスから拡張されたエンティティがいくつかあります。ユーザーには firstName フィールドと lastName フィールドがあります。User から拡張された各エンティティの検索があります。検索を実装するために、Criteria API を使用しています。同じパラメーターについて話しているため、それらのクエリは非常に似ています。そこで、すべてを 1 か所にまとめるジェネリック クラスを作成することにしました。
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 クラスの正確な拡張が明確でないためかもしれません。これを回避する方法があるかもしれません。前もって感謝します。