我正在尝试使用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);
但是,这并不能提供我感兴趣的所有记录。
感谢您的帮助!
答案 0 :(得分:1)
这个人应该找到所有ManualCorrection
个实体,它们具有一个toDate >= yearStart
和一个fromDate <= yearEnd
,这似乎正是您想要的。
List<ManualCorrection> findByToDateGreaterThanEqualAndFromDateLessThanEqual(
ZonedDateTime yearStart,
ZonedDateTime yearEnd
);
答案 1 :(得分:1)
您应该看看the reference documentation。很好地解释了。
在您的情况下,我认为您不能在两者之间使用,因为您需要传递两个参数
之间-findByStartDateBetween…其中x.startDate在?1和?2之间
在您的情况下,请结合使用LessThan
或LessThanEqual
与GreaterThan
或GreaterThanEqual
的组合
LessThan-findByEndLessThan…其中x.start <?1
LessThanEqual findByEndLessThanEqual…其中x.start <=?1
GreaterThan-findByStartGreaterThan…其中x.end>?1
GreaterThanEqual-findByStartGreaterThanEqual…其中x.end> =?1
您可以使用运算符And
和Or
来组合两者。
您还可以使用@Query
@Query(value = "from EntityClassTable t where yourDate BETWEEN :yearStart AND :yearEnd")
public List<EntityClassTable> getAllBetweenDates(@Param("yearStart")Date yearStart,@Param("yearEnd")Date yearEnd);
希望这会对您有所帮助。谢谢:)