【问题标题】:Hibernate + Mysql : Data truncation: Incorrect datetime valueHibernate + Mysql:数据截断:日期时间值不正确
【发布时间】:2025-12-21 09:35:16
【问题描述】:

全部,

我正在使用 Spring、Hibernate 和 MySQL 将一些记录保存到稍后处理的队列中。

由于我使用的是 Java 8,因此建议使用 JodaTime 库而不是 Java SQL Date c.f。 here

型号

    @Entity
@Table(name = "order_job_queue")
public class CancelReward implements Serializable {
    private static final long serialVersionUID = 1L;


    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "processed_state")
    private String processedState;

    @Column(name = "order_reference_id")
    private int orderReferenceId;

    @Column(name = "creation_date", columnDefinition = "DATETIME DEFAULT")
    private DateTime creationDate;

    @Column(name = "last_checked_date", columnDefinition = "DATETIME DEFAULT")
    private DateTime lastCheckedDate; ...

@PrePersist
protected void onCreate() {
    creationDate = new DateTime().toDateTime();
}

@PreUpdate
protected void onUpdate() {
    lastCheckedDate = new DateTime().toDateTime();
}

表格

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`processed_state` VARCHAR(45) NOT NULL,
`order_reference_id` INT UNSIGNED NOT NULL,
`creation_date` DATETIME NOT NULL,
`last_checked_date` DATETIME NOT NULL,

依赖版本

  • Spring 框架 - 4.3.3
  • 休眠 - 4.3.5
  • 休眠 JPA2 API - 1
  • MySQL 连接器 - 5.1.40

当我尝试保存一个实体时,我得到这个堆栈跟踪抱怨截断。

数据截断:日期时间值不正确:第 1 行的列“creation_date”的“��” 处理请求时出错:无法执行语句; SQL [不适用];嵌套异常是 org.hibernate.exception.DataException: could not execute statement

我也尝试过使用 Java SQL Date,但不知道如何解决这个问题。a

【问题讨论】:

    标签: java mysql spring hibernate


    【解决方案1】:

    尝试在 java 中使用标准日期:

    import java.util.Date;
    

    java.sql.Timestamp 应该也可以,但我自己从未尝试过。

    【讨论】:

    • 谢谢,成功了。令人失望的是,JodaTime 无法工作,因为它实现了 Date.util 接口:(