如何在JPA存储库自定义方法上应用搜索条件(规范)?

时间:2019-03-26 13:18:58

标签: java spring-boot jpa

如何将搜索规范应用于存储库方法?

这是我的代码

@Repository
public interface JourneyRepository extends JpaRepository<Journey, Long>, JpaSpecificationExecutor<Journey> {

    Page<Journey> findAllByDriverId(Long id, Pageable pageable);
}

我想在findAllByDriverId上应用搜索条件规范

3 个答案:

答案 0 :(得分:0)

findByType模式由spring data jpa提供。 JpaSpecificationExecutor仅支持以下接口。如果要findAllByDriverId,只需使用spring data jpa。

public interface JpaSpecificationExecutor<T> { 
     T findOne(Specification<T> spec); 
     List<T> findAll(Specification<T> spec); 
     Page<T> findAll(Specification<T> spec, Pageable pageable); 
     List<T> findAll(Specification<T> spec, Sort sort); 
     long count(Specification<T> spec); 
}

我认为您不需要JpaSpecificationExecutor,并且我猜DriverId在旅程中?然后加入spring-boot-starter-data-jpa

public interface JourneyRepository extends JpaRepository<Journey, Long> {

   Page<Journey> findAllByDriverId(Long id, Pageable pageable);
}

答案 1 :(得分:0)

是的,您可以使用存储库中方法上方的@Query注释,例如:

@Query(value="select * from Journey where [name of the field] = ?1",
       countQuery = "SELECT count(*) FROM Journey WHERE [name of the field] = ?1",
       nativeQuery = true)
Page<Journey> findAllByDriverId(Long id, Pageable pageable);

答案 2 :(得分:0)

您可以将JPA Criteria用于弹簧数据JPA,请查看下面的链接,该链接将为您提供所需的内容:

full description