Springboot findByDate Mysql

问题描述

我遇到一个问题,无法找到在2个日期内创建的数据库的结果。 当前,如果我正在寻找2020-11-01和2020-11-02之间的结果,则查询仅返回2020-11-01的结果,而不返回2020-11-02的结果。

就像我在两个相同的日期之间进行搜索一样,没有任何结果...

我希望通过在01和02之间进行搜索,它会向我返回这两个日期之间已经实现的结果,因此结果分别为2020-11-01和2020-11-02。

我也希望这个请求能够在两个相同的日期工作。

我希望有可能! :) 感谢您的帮助

我的存储库

List<HistoriqueDeploiement> findByNamespaceIdAndLogCreatedAtBetween(Integer id_namespace,Date date_debut,Date date_fin);

我的控制器:

@GetMapping("/historiquedeploiement/namespace/{namespace}/date/{date_debut}/{date_fin}")
    public ResponseEntity<List<HistoriqueDeploiementReadingDTO>> GetHistoriqueDeploiementfindByNamespaceIdMapping(@PathVariable String namespace,@PathVariable("date_debut") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date_debut,@PathVariable("date_fin") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date_fin) throws InternalServerErrorException {
        Integer idnamespace = namespaceRepository.findByNamespace(namespace).getId();
        return new ResponseEntity<>(mappingHistoriquetoDTO.findByNamespaceIdAndLogCreatedAtBetweenMapping(idnamespace,date_debut,date_fin),HttpStatus.OK);  
    }

解决方法

使用between时,我们希望获取从2020-11-01创建的记录,直到2020-11-02结束。不幸的是事实并非如此。真正发生的是:

created_at between '2020-11-01 00:00:00+00000' and '2020-11-02 00:00:00+00000'

要检索2020-11-01和2020-11-02之间的记录,您必须在结束日期前加上1天。这样,您的查询将等同于:

created_at between '2020-11-01 00:00:00+00000' and '2020-11-03 00:00:00+00000'

我知道这与Spring JPA有关,但这也是一本好书:https://sqlblog.org/2009/10/16/bad-habits-to-kick-mis-handling-date-range-queries