gpt4 book ai didi

Spring queryByExample 与范围之间

转载 作者:行者123 更新时间:2023-12-01 04:50:31 24 4
gpt4 key购买 nike

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

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

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

eventRepository.findAll(Example.of(e), pageable);

工作得很好,我快到了。
但我需要限制在“从”和“到”之间的日期范围内

我看到一些帖子说它不适用于 QBE,但这是在 2015 年。

我创建了一个 Range 对象,但我不知道如何应用它。

http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Range.html

我不能使用默认的 Spring 方式
@Transactional
interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> {

def findBetween(Date lower, Date upper)

}

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

最佳答案

您可以从 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()]));
};

}

并在 findAll 中使用 Specification 和 JpaSpecificationExecutor。
List<Event> events = eventRepository.findAll(getSpecFromDatesAndExample(from, to, Example.of(Event)));

关于Spring queryByExample 与范围之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41607319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com