[英]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.