我正在尝试从mysql数据库中检索今天的记录。

我尝试使用jpa-repository中的springboot data-jpa和findByDate(Date date,Pageable pageable)方法,它始终返回空结果。

这是创建的实体代码:

@Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_synop")
    private Long id;

    @Column(name="contenu")
    private String contenu;

    @Column(name="date", columnDefinition="TIMESTAMP(0)")
    @Temporal(TemporalType.TIMESTAMP)
    private Date date;

    @ManyToOne(cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},
            fetch=FetchType.LAZY)
    @JoinColumn(name="id_station")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    private Station station;


这是用Mysql WorkBench创建的Mysql表:

CREATE TABLE `synop` (
  `id_synop` bigint(20) NOT NULL AUTO_INCREMENT,
  `id_station` bigint(20) NOT NULL,
  `contenu` varchar(255) NOT NULL,
  `date` timestamp NOT NULL,
  PRIMARY KEY (`id_synop`),
  UNIQUE KEY `idmsgsynop_UNIQUE` (`id_synop`),
  KEY `fk_synope_station_idx` (`id_station`),
  CONSTRAINT `fk_synope_station` FOREIGN KEY (`id_station`) REFERENCES `station` (`id_station`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;



jpa存储库代码:

import java.util.Date;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface SynopRepository extends JpaRepository<Synop, Long> {
    public Page<Synop> findByStationId(Long stationId, Pageable pageable);

    public Page<Synop> findByDate(Date date, Pageable pageable);
}


和控制器代码:

@GetMapping("/synops-today")
    public Page<Synop> findToday(@RequestParam(defaultValue="1") int page,Pageable pageable) {
        return synopRepository.findByDate(new Date(),PageRequest.of(page-1, 10, Sort.by("date").ascending()));
    }


我希望通过使用findByDate(...)方法获取今天的记录,但是它似乎不起作用。当从MysqlWorkbench查看数据时,我还注意到了一个小问题:日期似乎提前了2h(例如:现在是11:57,但是在mysql workbench软件中,它显示9:57,当我查询服务器时间时,它显示了irght tme ...)
实际上,我并不关心要检索今天记录的小时/分钟/秒。

最佳答案

尝试此解决方案是否对您有帮助-> date-only-comparison-without-time-using-jpa-named-query

基本上,尝试使用@Temporal(TemporalType.DATE)代替@Temporal(TemporalType.TIMESTAMP)

如果不是,那么您可以编写使用sql函数仅匹配日期部分而不匹配时间的自定义查询-> comparing-dates-in-mysql-ignoring-time-portion

10-08 00:26