spring-data-jpa Spring JPA使用LocalDateTime在mongo中获取介于某个范围(含)之间的日期

c6ubokkw  于 2022-11-10  发布在  Spring
关注(0)|答案(3)|浏览(243)

非常类似于这个问题:Check date between two other dates spring data jpa
但是,我尝试使用MongoDB和java.time.LocalDateTime来实现这一点。
我试过:

  • findAllByMetadataStartTimeBetween(start, end)(可以工作,但不包括开始/结束)
  • findAllByMetadataStartTimeGreaterThanEqual(start)(工作,但没有结束)

然而,当我试着:findAllByMetadataStartTimeGreaterThanEqualAndMetadataStartTimeLessThanEqual(start,end)
我得到的错误:json can't serialize type : class java.time.LocalDateTime
你知道为什么这个特定的组合会抛出这个错误,而前面的组合不会吗?

e4eetjau

e4eetjau1#

尝试下面的代码。我确信,适用于包含

@Query("{'dateTime' : { $gte: ?0, $lte: ?1 } }")
List<YourObject> findByDateTimeBetween(Date from, Date to);

下面的Spring Data 方法签名适用于独占

public List<YourObject> findByDateBetween(Date from, Date to);
hrirmatl

hrirmatl2#

您必须进行自定义查询:

Query query = new Query(
      new Criteria().andOperator(
    Criteria.where("metadataStartTime").gte(start),
    Criteria.where("metadataStartTime").lte(end)
  )
);

return mongoTemplate.find(query, EntityName.class);
cgyqldqp

cgyqldqp3#

JPA“Between”方法是包含性的。问题可能出在日期对象的精度上。
尝试确保比较的开始日期具有**精确的小时、分钟、秒和毫秒。**即使搜索的数据提前了几毫秒,查询也不会捕获它。
在我的例子中,当我将它们的开始日期都设置为00:00:00.000,结束日期设置为23:59:59.999时,JPA findAllByMetadataStartTimeBetween(start,end)工作正常,并且包含

相关问题