Spring JPA 和 MySQL 存储不正确的 LocalDateTime 值

问题描述

我正在使用 Spring Data JPA 在 MysqL 表列中存储日期时间值。但它的表现真的很奇怪。当我创建应该存储的实体时,我有 LocalDateTime 字段用于创建日期和时间,该字段是通过 LocalDateTime.Now() 设置的。当我调试代码并查看正在运行的代码时,LocalDateTime 字段将使用正确的日期和时间进行实例化。但是由于某种原因,当实体存储在 MysqL 数据库中时,时间会设置为过去的两个小时。如果时间是下午 4 点,它会在数据库表中设置为下午 2 点。但是,当我再次使用 jpa 存储库读取数据库中的值时,它又被提前了 2 小时,尽管它以 tho 小时偏移量存储。所以这有点像两个错误使一个正确......我猜?怎么会这样?这似乎很疯狂,而且……不合逻辑。如果这很重要,那就是本地开发。

解决方法

我认为这个问题与数据库有关,而不是与您的代码有关。

我的系统中有一种不同的方法

 Instant instant = Instant.now();
 Timestamp timestamp = Timestamp.from(instant);

使用此时间戳设置日期和时间,并且您必须更改实体类属性

private Timestamp publishedAt;

我希望它会奏效!!

,

由于数据库的原因,我早些时候遇到了这个问题,所以最初,我尝试减少时间和分钟数,但是,它不起作用。所以我重新加载应用程序和数据库然后它工作正常。 你可以试试它可能对你有用

,

尝试使用这些注释

    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "published_at")
    private Date publishedAt;