我正在使用POOT,使用Spring Boot 2.0.5,使用Hibernate使用Spring Data JPA。我正在尝试实现一种方法以流式传输自定义条件的结果集。我看过
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
。我对这两者感到困惑,应该使用哪一个?为什么?
答案 0 :(得分:-1)
根据Spring Data JPA规范Spring Data JPA,这是创建条件查询的方式。
步骤1:使用JpaSpecificationExecutor
界面扩展存储库界面,如下所示:
public interface CustomerRepository extends CrudRepository<Customer, Long>, JpaSpecificationExecutor {
…
}
步骤2:findAll方法返回与规范匹配的所有实体,如以下示例所示:
List<T> findAll(Specification<T> spec);
第3步:规范接口定义如下:
public interface Specification<T> {
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query,
CriteriaBuilder builder);
}