gpt4 book ai didi

java - 设置日期后无法保存实体

转载 作者:行者123 更新时间:2023-11-30 21:26:55 25 4
gpt4 key购买 nike

我将 Spring Boot 与 JPA 和 Lombok 结合使用。我的 Sample 实体包含四个日期,approved 日期、样本日期以及维护的 createdAtmodifiedAt由 JPA 本身使用 Auditable 类。 JPA 管理架构、运行 MySQL 的数据库以及所有日期列都是 DateTime。所有日期都属于 java.util.Date 类。

示例实体(出于某些原因进行了简化)

@Entity
@Data
@EqualsAndHashCode(callSuper = false)
public class Sample extends Auditable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;

Date approved;

@DateTimeFormat(pattern = "yyyy-MM-dd'T'H:m")
Date sampleDate;
}

sampleDate 上的DateTimeFormat 是为了帮助 Spring 将表单数据转换为 java.util.Date

Auditable.java

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Auditable {

@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;

@LastModifiedDate
@Column(name = "modified_at")
@Temporal(TemporalType.TIMESTAMP)
private Date modifiedAt;
}

当我的 Controller 执行此操作时:

Sample s = sampleRepository.getOne(id);
s.setApproved(new Date());
sampleRepository.save(s);

Spring 生成此错误消息:

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'approved' at row 1

最佳答案

你最好使用 LocalDateTime 而不是 java.util.Datejava.sql.Date,如果你用 java >= 8 这样做的话。

Audited 实体的 createdDate、lastModifiedDate 应该由 Jpa Auditor(框架)设置,而不是由客户端(在这种情况下,您)设置。

此外,如果您想保留代码,可以尝试使用 @Temporal(TemporalType.DATE) 而不是 TemporalType.TIMESTAMP

已更新

抱歉,我错过了您提出的确切主题。

只需尝试在 Date approved; 上方添加 @Temporal(TemporalType.DATE)

关于java - 设置日期后无法保存实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com