1

私のアプリケーションには、 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 クラスの正確な拡張が明確でないためかもしれません。これを回避する方法があるかもしれません。前もって感謝します。

4

0 に答える 0