繁体   English   中英

在自定义存储库中使用 SpringBoot 和 JPA Criteria Query 查询时间戳

[英]Querying with Timestamps using SpringBoot and JPA Criteria Query in custom repository

如何使用 JPA 标准查询基于自定义 JPA 存储库中的时间戳进行查询?

我有一个startTimeendTime ,我想用它们来查询它们之间的字段time ,但我需要在自定义存储库中执行此操作,因为我需要使用许多其他字段来构建复杂的查询.

我可以成功地构建一个复杂的查询并获得正确的结果,除非我尝试通过startTimeendTime进行查询。 我一直在尝试做类似以下的事情,但没有运气

@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

这个想法是在startTimeendTime之间获取所有具有字段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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM