我正在研究一个POC,使用Spring Boot 2.0.5,Spring Data JPA使用Hibernate。我正在尝试实现一种方法来流式传输自定义条件的结果集。我见过这样的例子
public interface MyRepository implements JPARepository<Person,Long>{
@Query("select p from person p")
Stream<Person> findAll();
}
但是,我正在扩展SimpleJPARepository
并希望使用类似Criteria
将结果作为流获取
Stream<Person> findAll(Criteria criteria);
由于我使用的是扩展SimpleJPARepository
的类,因此我需要提供我的实现。但是SimpleJPARepository
或其父类中是否有任何方法可以使用我提供的条件为我提供默认实现。任何对此类示例的引用都非常有帮助。
此外,在某些示例中,我看到使用了@NoRepositoryBean
,在某些情况下@Repository
.我在这两者之间感到困惑,我应该使用哪一个,为什么?
根据 Spring Data JPA规范 Spring Data JPA,这是创建 Criteria 查询的方式。
步骤 1:使用JpaSpecificationExecutor
接口扩展存储库接口,如下所示:
public interface CustomerRepository extends CrudRepository<Customer, Long>, JpaSpecificationExecutor {
…
}
步骤 2:findAll 方法返回与规范匹配的所有实体,如以下示例所示:
List<T> findAll(Specification<T> spec);
步骤三:规范接口定义如下:
public interface Specification<T> {
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query,
CriteriaBuilder builder);
}