[英]Querying with Timestamps using SpringBoot and JPA Criteria Query in custom repository
如何使用 JPA 标准查询基于自定义 JPA 存储库中的时间戳进行查询?
我有一个startTime
和endTime
,我想用它们来查询它们之间的字段time
,但我需要在自定义存储库中执行此操作,因为我需要使用许多其他字段来构建复杂的查询.
我可以成功地构建一个复杂的查询并获得正确的结果,除非我尝试通过startTime
和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();
其中data.getStartTime()
和data.getEndTime()
的类型为java.sql.Timestamp
。
这个想法是在startTime
和endTime
之间获取所有具有字段time
时间戳的条目。
关于如何做到这一点的任何想法?
谢谢。
您可以通过使用 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 将自动执行查询并返回结果。 官方文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.