Я создаю приложение Spring Boot, имеющее такие объекты, как Product, Category, Machinery, UsageLocation и т. Д. Общим для всех этих объектов является то, что все они имеют атрибут String с именем name и могут быть отфильтрованы из пользовательского интерфейса с помощью name. Я написал спецификацию продукта для фильтрации по имени, и он работает. Ниже приведен код
public final class ProductSpecifications
{
public static Specification<Product> whereNameContains(String name)
{
Specification<Product> finalSpec = (Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb)
-> cb.like(root.get(Product_.PRODUCT_NAME), "%"+name+"%");
return finalSpec;
}
public static Specification<Product> whereNameEqauls(String name)
{
Specification<Product> finalSpec = (Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb)
-> cb.equal(root.get(Product_.PRODUCT_NAME), name);
return finalSpec;
}
}
Теперь проблема в том, что мне нужно снова написать тот же код для фильтрации других сущностей, с той лишь разницей, что это имя класса (Product), имя поля (PRODUCT_NAME) и возвращаемый тип метода. Могу ли я создать общий класс и метод, которому я могу передать имя класса и имя поля в качестве параметров, и он возвращает спецификацию соответствующего возвращаемого типа.