在我的应用程序中,我有一些从 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));
}
这是规范生成器:
public interface SpecificationBuilder<Entity> {
Specification<Entity> getSpecOfSearchParam(String searchParam);
}
问题是 Intellij 为 MetaModel.lastName 和 MetaModel.firstName 加了下划线(它说“无法使用 ...User.firstName 解析方法”)。可能是因为不清楚我们期望的 User 类的确切扩展。可能有办法避免这种情况。提前致谢。