0

如何使用 JPA Criteria Query 根据自定义 JPA 存储库中的时间戳进行查询?

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

我可以成功构建一个复杂的查询并获得正确的结果,除非我尝试使用startTimeand进行查询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之间的字段中获取所有带有时间戳的条目。startTimeendTime

关于如何做到这一点的任何想法?

谢谢。

4

1 回答 1

0

您可以通过使用 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 会自动执行查询并返回结果。官方文档

于 2020-07-15T03:37:25.073 回答