Для использования Спецификация ваш ProductInfoEntityRepository
должен быть расширен JpaSpecificationExecutor
@Repository
public interface ProductInfoEntityRepository
extends JpaRepository<ProductInfoEntity, Integer>, JpaSpecificationExecutor<ProductInfoEntity> {
}
Насколько я понимаю, вы используете JPA
метамодель. Итак,
@Autowired
ProductInfoEntityRepository repository;
public List<ProductInfoEntity> findProductInfoEntities(int productId, int languageId) {
return repository.findAll((root, query, builder) -> {
Predicate productPredicate = builder.equal(
root.get(ProductInfoEntity_.productEntity).get(ProductEntity_.id), // or root.get("productEntity").get("id")
productId);
Predicate languagePredicate = builder.equal(
root.get(ProductInfoEntity_.supportLanguageEntity).get(SupportLanguageEntity_.id), // or root.get("supportLanguageEntity").get("id")
languageId);
return builder.and(productPredicate, languagePredicate);
});
}
Если вы хотите сделать спецификации многоразовыми, вы должны создать служебный класс, содержащий два метода c * * * * * * * * и languageIdEquals(int)
.
Чтобы объединить их, используйте Технические характеристики (Spring Data JPA 1. *) или Спецификация (начиная с Spring Data JPA 2.0)