在我的应用程序中,我有一些从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解析方法”)。可能是因为我们还不清楚用户类的确切扩展是什么。可能有办法避免这种情况。提前谢谢。