【问题标题】:Crudrepository How to find by last date between?Crudrepository 如何找到最后日期之间的?
【发布时间】:2023-03-17 06:30:01
【问题描述】:

我的域已更新,日期字段已更新,我想通过这些字段进行搜索

@Column(name = "updated")
Date updated;

我有一个代表一天的 Java Date 对象,它由我的端点控制器传入。

Date day;

还有一个代表我的数据的 crudrepository

public interface DataRepository extends CrudRepository<Data, Long> {

   List<Data> findByLastUpdatedInDate(Date date);

}

显然上面的方法是行不通的,但是有没有类似的呢?还是我必须在两者之间进行查找,然后手动搜索最后一个条目?

编辑:这就是我得到一天的方式; dateString 由控制器传入。

SimpleDateFormat dateFormatIn = new SimpleDateFormat("yyyy-MM-dd");
Date day = dateFormatIn.parse(dateString);

【问题讨论】:

  • 不清楚你在问什么?传递给控制器​​的日期是什么?你想根据它进行搜索吗?你能解释清楚一点吗
  • 我从外部源存档数据,然后通过一个以 yyyy-MM-dd 格式获取日期的 restful 服务提供它;我将其转换为 Java 日期对象,即日期。
  • 你能举个例子吗
  • SimpleDateFormat simpleForm = new SimpleDateFormat("yyyy-MM-dd");日期 day = simpleForm.parse(dateString);
  • 你想在数据库中搜索这个日期吗?您的主题标题显示之间的最后日期。之间是什么?在哪个日期之间?

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


【解决方案1】:

你快到了。如果我正确阅读了文档,那么轻微的调整就是:

Data data = dataRepository.findTopByUpdatedBetweenOrderByUpdatedDesc(start, stop);

来源:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-query-result

【讨论】:

    【解决方案2】:

    您可以使用 @Query 注释来注释您的方法并编写 HQL 查询

    @Query("select d from Data d where d.updated= :date")
    List<Data> findByLastUpdatedInDate(@Param("date") Date date);
    

    【讨论】:

    • 可能对精确匹配的日期不感兴趣。但在某一天或之后,另一天之前
    • 我错过了什么吗,这看起来和 List findByUpdated(Date date); 一样
    • 是的,这与 findByUpdated(Date date) 相同。在上面的评论中,您提到您有自定义查询。您能否发布以显示您想要实现的目标。您可以使用 order by 和 Pageable 作为请求的一部分
    • 我说过我可以做一个,但我还没有;我现在使用的解决方案是; data = dataRepository.findByUpdatedBetweenOrderByUpdatedDesc(start, stop).get(0);其中 Start 是 2018 年 6 月 22 日 00:00:00,Stop 是 2018 年 6 月 23 日 00:00:00,我从 2018 年 6 月 22 日开始,需要获取当天的最后一个条目。我刚才提到的方法有效,但我想要更优雅一点的方法。
    • 那么 List findByUpdatedBetweenByUpdatedDesc(Date start, Date end, Pageable pageable);调用看起来像 this.findByUpdatedBetweenByUpdatedDesc(new Date(), new Date(), PageRequest.of(0, 1))
    【解决方案3】:

    我希望有人能找到更优雅的东西,但现在我使用的是

    List<Data> findByUpdatedBetweenOrderByUpdatedDesc(Date start, Date stop);
    

    并转换日期

    Date start = new Date(day.getTime());
    Date stop = new Date(day.getTime() + 86400000L);
    

    获取我的条目

    Data data = dataRepository.findByUpdatedBetweenOrderByUpdatedDesc(start, stop).get(0);
    

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      相关资源
      最近更新 更多