java - 在自定义存储库中使用 SpringBoot 和 JPA Criteria Query 查询时间戳
问题描述
如何使用 JPA Criteria Query 根据自定义 JPA 存储库中的时间戳进行查询?
我有一个startTime
,endTime
我想用它来查询time
它们之间的字段,但我需要在自定义存储库中执行此操作,因为我需要使用许多其他字段来构建复杂的查询。
我可以成功构建一个复杂的查询并获得正确的结果,除非我尝试使用startTime
and进行查询endTime
。我一直在尝试做类似以下的事情,但没有运气
@PersistenceContext private EntityManager em;
...
final CriteriaBuilder cb = this.em.getCriteriaBuilder();
final CriteriaQuery<AutoenrollmentEvent> cr = cb.createQuery(Event.class);
final Root<AutoenrollmentEvent> root = cr.from(Event.class);
final List<Predicate> predicates = new ArrayList<>();
...
predicates.add(cb.between(root.get("time"), data.getStartTime(), data.getEndTime()));
...
cr.select(root).where(predicates.toArray(new Predicate[0]));
return this.em.createQuery(cr).getResultList();
wheredata.getStartTime()
和data.getEndTime()
are 的类型java.sql.Timestamp
。
这个想法是在和time
之间的字段中获取所有带有时间戳的条目。startTime
endTime
关于如何做到这一点的任何想法?
谢谢。
解决方案
您可以通过使用 Spring Data JPA CrudRepository 接口来实现:
public interface EventRepository extends CrudRepository<Event, Long> {
List<Event> findAllByTimeAfterAndTimeBefore(Timestamp start, Timestamp end);
}
然后使用它:
public class MyClass {
@Autowired
private EventRepository eventRepository;
public void myMethod() {
Timestamp startTime = // create start timestamp
Timestamp endTime = // create end timestamp
List<Event> events = eventRepository.findAllByTimeAfterAndTimeBefore(startTime,endTime);
}
}
Spring 会自动执行查询并返回结果。官方文档。
推荐阅读
- lotus-notes - 如何在 LotusScript 代理中使用 NSFNoteCipherDecrypt
- dataweave - 在 Mulesoft 中获取消息异常
- javascript - HTML:动态修复用户正在阅读的标题和子标题
- c# - 验证用户对网页的身份,同时阻止他们通过直接链接访问它
- php - Apache 无法使用 curl 发出传出 HTTP 请求
- hadoop - 插入 HIVE 表时转换值
- c++ - yaml-cpp 编码/解码指针?
- ffmpeg - 如何在 ffmpeg (-f) 中为输入和输出指定文件类型?
- sql - 子查询上的多个 id 来计算计数
- group-by - SQL中固定间隔和分组依据后的平均值