【问题标题】:Check date between two other dates spring data jpa检查其他两个日期之间的日期弹簧数据jpa
【发布时间】:2017-02-08 14:36:02
【问题描述】:

我有这个模型:

public class Event {
    private String name;
    private Date start;
    private Date end;
}

和存储库作为

@Repository
public interface EventRepository extends JpaRepository<Event, Long> {
    List<Event> findByEventTypeAccount(Account account);
}

我想要做的是,我会通过一个日期,需要检查日期是否在startend 之间,例如(我将通过 9 月 30 日作为日期,并且需要找到所有在其 startend 之间具有 9 月 30 日的条目)

类似findDateisBetweenStartAndEnd(Date date)

【问题讨论】:

标签: java spring spring-data-jpa spring-repositories


【解决方案1】:

你应该看看the reference documentation。解释得很好。

在你的情况下,我认为你不能使用 between 因为你需要传递两个参数

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

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

  • LessThan/LessThanEqual

LessThan - findByEndLessThan … where x.start

LessThanEqual findByEndLessThanEqual … 其中 x.start

  • GreaterThan/GreaterThanEqual

GreaterThan - findByStartGreaterThan ... where x.end> ?1

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

您可以使用运算符AndOr 将两者结合起来。

【讨论】:

  • 您好,这可以使用字符串值吗?因此,例如使用人员表并选择 lastname = "abcd" 到 lastname = "efgh" 之间的所有内容
  • @Pau 方法名称不应该是findByStartLessThan\EqualfindByStartGreaterThan\Equal,所以它对应于JPQL(即where x.start &lt;\= ?1where x.end &gt;\= ?1)?
  • 您能告诉我您从客户端传递到调用方法 findDateisBetweenStartAndEnd 的控制器的日期格式吗?当我通过客户端为端点提交请求时,我坚持使用格式部分。
  • 如何在另一个属性上添加 where 条件?在 Spring Data jpa 的单个查询中,在哪里和之间?
【解决方案2】:

我确实使用了以下解决方案:

findAllByStartDateLessThanEqualAndEndDateGreaterThanEqual(OffsetDateTime endDate, OffsetDateTime startDate);

【讨论】:

  • 你请你添加一点(更详细的)解释?
  • 但是为此你应该传递两个日期开始和结束一个,我认为是正确的方法
  • 婴儿车的顺序有误。首先,param 与 startDate 相关,而不是 endDate
  • @JordanSilva ,参数的顺序是正确的,因为它测试的是一个周期跨越另一个周期,而不是另一个周期完全在检查周期内。
【解决方案3】:

您还可以使用@Query 编写自定义查询

@Query(value = "from EntityClassTable t where yourDate BETWEEN :startDate AND :endDate")
public List<EntityClassTable> getAllBetweenDates(@Param("startDate")Date startDate,@Param("endDate")Date endDate);

编辑:对于 LocalDateTime,我刚刚尝试了这个解决方案,用于在 Spring JPA 中根据日期和类型过滤记录:

Page<MyEntity> findMyEntityByEntityDateBetweenAndType(
            @Param("startDate") LocalDateTime startDate,
            @Param("endDate") LocalDateTime endDate, @Param("type") String type, Pageable pageable);

这里的EntityDate可以是CreatedDate、ModifiedDate等

【讨论】:

  • 它将如何处理空开始和结束日期?
【解决方案4】:

也许你可以试试

List&lt;Article&gt; findAllByPublicationDate(Date publicationDate);

详情可以看这篇文章:

https://www.baeldung.com/spring-data-jpa-query-by-date

【讨论】:

  • 这是不明代码和链接的组合。请添加代码如何工作以及它应该如何解决问题的解释。如果没有这样的解释,你的帖子就会传播这样一种误解,即 StackOverflow 是一个兜售无偿编程工作的平台。外部链接不被视为这样的解释。仅链接的答案可能会被删除。
猜你喜欢
  • 1970-01-01
  • 2018-06-28
  • 2023-02-07
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多