Spring 数据获取给定年份有效的记录(包含字段 fromDate、toDate)
Spring data getting records valid for given year (with fields fromDate, toDate)
我正在尝试使用 JPA 存储库从数据库中过滤一些记录。
我得到了一个包含以下字段的实体:
@Column(name = "from_date", nullable = false)
private ZonedDateTime fromDate;
@Column(name = "to_date", nullable = true)
private ZonedDateTime toDate;
我需要 select 给定年份(lats 说 2018)发生的所有记录。
棘手的部分是:如果 'from_date' 来自 2017 年,但 'to_date' 是 ie。 2019年,我想包括那张唱片。
你能给我一些想法吗?如何解决?是否有可能只用一种方法得到它?
如果可能的话,我想使用查询方法。
目前我发明的方法:
List<ManualCorrection> findByFromDateGreaterThanEqualAndFromDateLessThanAndToDateGreaterThanEqual(ZonedDateTime yearStart,ZonedDateTime yearEnd, ZonedDateTime yearStart2);
然而,这并没有给我所有我感兴趣的记录。
感谢您的帮助!
这应该会找到所有 ManualCorrection
个具有 toDate >= yearStart
和 fromDate <= yearEnd
的实体,这似乎是您要找的东西。
List<ManualCorrection> findByToDateGreaterThanEqualAndFromDateLessThanEqual(
ZonedDateTime yearStart,
ZonedDateTime yearEnd
);
你应该看看the reference documentation。解释的很好。
在你的情况下,我认为你不能使用 between 因为你需要传递两个参数
Between - findByStartDateBetween … where x.startDate between ?1 and ?2
在你的情况下,看看使用 LessThan
或 LessThanEqual
与 GreaterThan
或 GreaterThanEqual
的组合
- LessThan/LessThanEqual
LessThan - findByEndLessThan … where x.start< ?1
LessThanEqual findByEndLessThanEqual … where x.start <= ?1
- GreaterThan/GreaterThanEqual
GreaterThan - findByStartGreaterThan … where x.end> ?1
GreaterThanEqual - findByStartGreaterThanEqual … where 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);
希望这对您有所帮助。谢谢:)
我正在尝试使用 JPA 存储库从数据库中过滤一些记录。
我得到了一个包含以下字段的实体:
@Column(name = "from_date", nullable = false)
private ZonedDateTime fromDate;
@Column(name = "to_date", nullable = true)
private ZonedDateTime toDate;
我需要 select 给定年份(lats 说 2018)发生的所有记录。 棘手的部分是:如果 'from_date' 来自 2017 年,但 'to_date' 是 ie。 2019年,我想包括那张唱片。
你能给我一些想法吗?如何解决?是否有可能只用一种方法得到它? 如果可能的话,我想使用查询方法。
目前我发明的方法:
List<ManualCorrection> findByFromDateGreaterThanEqualAndFromDateLessThanAndToDateGreaterThanEqual(ZonedDateTime yearStart,ZonedDateTime yearEnd, ZonedDateTime yearStart2);
然而,这并没有给我所有我感兴趣的记录。
感谢您的帮助!
这应该会找到所有 ManualCorrection
个具有 toDate >= yearStart
和 fromDate <= yearEnd
的实体,这似乎是您要找的东西。
List<ManualCorrection> findByToDateGreaterThanEqualAndFromDateLessThanEqual(
ZonedDateTime yearStart,
ZonedDateTime yearEnd
);
你应该看看the reference documentation。解释的很好。
在你的情况下,我认为你不能使用 between 因为你需要传递两个参数
Between - findByStartDateBetween … where x.startDate between ?1 and ?2
在你的情况下,看看使用 LessThan
或 LessThanEqual
与 GreaterThan
或 GreaterThanEqual
- LessThan/LessThanEqual
LessThan - findByEndLessThan … where x.start< ?1
LessThanEqual findByEndLessThanEqual … where x.start <= ?1
- GreaterThan/GreaterThanEqual
GreaterThan - findByStartGreaterThan … where x.end> ?1
GreaterThanEqual - findByStartGreaterThanEqual … where 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);
希望这对您有所帮助。谢谢:)