范围介于之间的Spring queryByExample

范围介于之间的Spring queryByExample,spring,between,query-by-example,Spring,Between,Query By Example,我有一个带存储库的Spring应用程序 interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> { } Event e = new Event(); e.setTest('ABC'); eventRepository.findAll(Example.of(e), pageable); interface EventRepository扩展了

我有一个带存储库的Spring应用程序

interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> { }

Event e = new Event();
e.setTest('ABC');

eventRepository.findAll(Example.of(e), pageable);
interface EventRepository扩展了JpaRepository,QueryByExampleExecutor{}
事件e=新事件();
e、 setTest(“ABC”);
findAll(例如(e),可分页);
工作得很好,我就快到了。 但我需要将日期限制在“从”和“到”之间

我看到一些帖子说它不与QBE合作,但这是在2015年

我已经创建了一个范围对象,但我不知道如何应用它

我不能像这样使用默认的spring方式

@Transactional
interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> {

    def findBetween(Date lower, Date upper)

}
@Transactional
接口事件存储库扩展了JpaRepository,QueryByExampleExecutor{
def findBetween(日期下限,日期上限)
}

因为我有一组动态搜索参数。

您也可以从
JpaSpecificationExecutor
扩展,并从示例
中使用
QueryByExamplePredicateBuilder获取谓词。
请记住,birthdateField属于事件实体

public Specification<Event> getSpecFromDatesAndExample(
      LocalDateTime from, LocalDateTime to, Example<Event> example) {
return (Specification<Event>) (root, query, builder) -> {
  final List<Predicate> predicates = new ArrayList<>();

  if (from != null) {
    predicates.add(builder.greaterThan(root.get("birthdateField"), from));
  }
  if (to != null) {
    predicates.add(builder.lessThan(root.get("birthdateField"), to));
  }
  predicates.add(QueryByExamplePredicateBuilder.getPredicate(root, builder, example));

  return builder.and(predicates.toArray(new Predicate[predicates.size()]));
};
公共规范getSpecFromDatesAndExample(
LocalDateTime从,LocalDateTime到,示例){
返回(规范)(根、查询、生成器)->{
最终列表谓词=new ArrayList();
if(from!=null){
add(builder.greaterThan(root.get(“birthdateField”),from);
}
如果(到!=null){
add(builder.lessThan(root.get(“birthdateField”),to);
}
add(QueryByExamplePredicateBuilder.getPredicate(root,builder,example));
返回builder.and(predicates.toArray(新谓词[predicates.size()]);
};
}

并使用findAll中的规范和JpaSpecificationExecutor

List<Event> events = eventRepository.findAll(getSpecFromDatesAndExample(from, to, Example.of(Event)));
List events=eventRepository.findAll(getSpecFromDatesAndExample(from,to,Example.of(Event));
我在SOF上发现了一个问题。