该方法的findAll(排序)在类型JpaRepository 是不适用的参数(规格 )(

2019-10-30 03:38发布

我想要实现Specifications和想使用findAll(Specification<T> spec)的方法,但总是当我插入一个规范的Eclipse告诉我:

The method findAll(Sort) in the type JpaRepository<Telefonbuch,Long> is not applicable for the arguments (Specification<Telefonbuch>)

我不想使用Sort 。 我交出的规范,为什么它总是尝试使用与排序的方法是什么?

你可以在这里看到,该方法是通过Eclipse的一个建议: https://imgur.com/a/LuF6ZGK

规格:

public interface Specification<T> {
    Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder);
}

TelefonbuchSpecifications:

public static Specification<Telefonbuch> hasVorname(String vorname) {
    return (root, query, cb) -> {
        return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
    };
}

TelefonbuchRepository:

public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>, JpaSpecificationExecutor<Telefonbuch> {

SearchController:

public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
    if (!vorname.isEmpty()) {   
        List<Telefonbuch> list = telefonbuchRepository.findAll(TelefonbuchSpecifications.hasVorname(vorname));
    }

在这里,在

List<Telefonbuch> list = telefonbuchRepository.findAll(TelefonbuchSpecifications.hasVorname(vorname));
        }

它告诉我: The method findAll(Sort) in the type JpaRepository<Telefonbuch,Long> is not applicable for the arguments (Specification<Telefonbuch>)

Answer 1:

findAll不正是它说:它会找到所有的可能性。 所以,你正在尝试做的不是(按名字过滤)决策意识。

findAll基本上转化为SELECT * FROM TABLE

你需要在你的仓库,其执行你所寻找的,我以为查询申报的东西是SELECT * FROM TABLE WHERE <CONDITION>

作为转引自例子春天文档描绘以下作为一个准则:

该库:

public interface PersonRepository extends Repository<User, Long> { 
    List<Person> findByLastname(String lastname);
}

应用:

public class SomeClient {

  @Autowired
  private PersonRepository repository;

  public void doSomething() {
    List<Person> persons = repository.findByLastname("Matthews");
  }
}

您将需要定义,而不是试图迫使在一个条件粘附到您所需要的条件查询, findAll快捷。



Answer 2:

存储库还需要实现JpaSpecificationExecutor看到findAll(Specification<T>)方法。

另外请注意,我们不建议延长JpaRepository摆在首位,而是使用较少暴露接口之一CrudRepositoryPagingAndSortingRepository 。 见这个答案以供参考。



文章来源: The method findAll(Sort) in the type JpaRepository is not applicable for the arguments (Specification)