我有一个带有存储库的Spring Application
interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> { }
Event e = new Event();
e.setTest('ABC');
eventRepository.findAll(Example.of(e), pageable);
工作得很好,我几乎就在那里。 但我需要限制在&#39;之间的日期范围内。和&#39;
我看到一些帖子说它不与QBE合作,但这是在2015年。
我创建了一个Range对象,但我不知道如何应用它。
我不能使用像
这样的默认弹簧方式@Transactional
interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> {
def findBetween(Date lower, Date upper)
}
因为我有一堆动态搜索参数。
答案 0 :(得分:0)
您也可以从JpaSpecificationExecutor<T>
开始使用QueryByExamplePredicateBuilder from Example<T>
获取谓词。
请记住,birthdateField属于Event实体。
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()]));
};
}
并通过JpaSpecificationExecutor在findAll中使用Specification。
List<Event> events = eventRepository.findAll(getSpecFromDatesAndExample(from, to, Example.of(Event)));