使用Metamodel Java继承

时间:2018-06-11 13:29:21

标签: java criteria-api apache-metamodel

在我的应用程序中,我有一些从User类扩展的实体。用户具有firstName和lastName字段。搜索从User扩展的每个实体。要实现搜索我正在使用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解析方法”)。可能是因为我们还不清楚用户类的确切扩展是什么。可能有办法避免这种情况。提前谢谢。

0 个答案:

没有答案