春季数据获取记录在给定年份有效(带有字段fromDate,toDate)

时间:2019-03-11 22:07:00

标签: hibernate jpa spring-data-jpa spring-data persistent

我正在尝试使用JPA存储库来过滤数据库中的某些记录。

我有一个带有字段的实体:

@Column(name = "from_date", nullable = false)
private ZonedDateTime fromDate;

@Column(name = "to_date", nullable = true)
private ZonedDateTime toDate;

我需要选择给定年份的所有记录(经纬度为2018)。 棘手的部分是:如果'from_date'是2017年起,但是'to_date'是ie。 2019年,我想包括那个记录。

您能否给我一些想法,如何解决呢?仅用一种方法就能做到吗? 如果可能的话,我想使用查询方法。

此刻,我发明了方法:

List<ManualCorrection> findByFromDateGreaterThanEqualAndFromDateLessThanAndToDateGreaterThanEqual(ZonedDateTime yearStart,ZonedDateTime yearEnd, ZonedDateTime yearStart2); 

但是,这并不能提供我感兴趣的所有记录。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这个人应该找到所有ManualCorrection个实体,它们具有一个toDate >= yearStart和一个fromDate <= yearEnd,这似乎正是您想要的。

 List<ManualCorrection> findByToDateGreaterThanEqualAndFromDateLessThanEqual(
     ZonedDateTime yearStart,
     ZonedDateTime yearEnd
 ); 

答案 1 :(得分:1)

您应该看看the reference documentation。很好地解释了。

在您的情况下,我认为您不能在两者之间使用,因为您需要传递两个参数

  

之间-findByStartDateBetween…其中x.startDate在?1和?2之间

在您的情况下,请结合使用LessThanLessThanEqualGreaterThanGreaterThanEqual的组合

  • LessThan / LessThanEqual
  

LessThan-findByEndLessThan…其中x.start <?1

     

LessThanEqual findByEndLessThanEqual…其中x.start <=?1

  • GreaterThan / GreaterThanEqual
  

GreaterThan-findByStartGreaterThan…其中x.end>?1

     

GreaterThanEqual-findByStartGreaterThanEqual…其中x.end> =?1

您可以使用运算符AndOr来组合两者。

您还可以使用@Query

编写自定义查询
@Query(value = "from EntityClassTable t where yourDate BETWEEN :yearStart AND :yearEnd")
public List<EntityClassTable> getAllBetweenDates(@Param("yearStart")Date yearStart,@Param("yearEnd")Date yearEnd);

希望这会对您有所帮助。谢谢:)