[英]Unable to save entity when date is set
我正在使用 Spring 引导与 JPA 和 Lombok。 My Sample实体包含四个日期,即批准日期、样品日期和createdAt
和modifiedAt
,由 JPA 本身和可审计的Auditable
维护。 JPA 管理模式,数据库运行 MySQL 并且所有日期列都是DateTime
。 所有日期均为 class 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
。
可审计的.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:数据截断:行“已批准”列的数据太长
You would better use LocalDateTime instead of java.util.Date
or java.sql.Date
, if you are doing this with java >= 8.
被审计实体的 createdDate、lastModifiedDate 应该由 Jpa Auditor(框架)设置,而不是由客户(在这种情况下,你)设置。
此外,如果您想保留代码,可以尝试@Temporal(TemporalType.DATE)
而不是TemporalType.TIMESTAMP
。
抱歉,我错过了您提出的确切主题。
只需尝试在批准日期上方添加@Temporal(TemporalType.DATE)
Date approved;
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.