假设我有一个条件
@Repository
public interface FooRepository extends JpaRepository<Foo, Integer>, JpaSpecificationExecutor<Foo> {
static Specification<Foo> byBars(Collection<String> bars) {
return (Root<Foo> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) -> {
if (bars.isEmpty()) {
return criteriaBuilder.disjunction();
}
return root.get("bar").in(bars);
};
}
}
好吧,这给了我们fooRepository.findAll(byBars(...) )
现在如何定义存储库方法以实现批量删除?
deleteBy(Specification<Foo> specification);
不起作用,也不起作用
void deleteAll(Specification<Foo> specification);
或
void delete(Specification<Foo> specification);
因为
没有找到类型为Foo的deleteBy!
Spring规范支持find,findAll和count查询。spring-data JPA中不支持删除和更新方法。
来自JpaSpecificationExecutor的参考:
Optional<T> findOne(@Nullable Specification<T> spec);
List<T> findAll(@Nullable Specification<T> spec);
Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);
List<T> findAll(@Nullable Specification<T> spec, Sort sort);
long count(@Nullable Specification<T> spec);