有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在自定义存储库中使用SpringBoot和JPA条件查询进行带时间戳的java查询

如何使用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字段中获取所有具有时间戳的条目

有什么办法吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    您可以通过使用Spring Data JPA Crudepository接口来实现这一点:

    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将自动实现查询并返回结果Official docs