簡體   English   中英

設置日期時無法保存實體

[英]Unable to save entity when date is set

我正在使用 Spring 引導與 JPA 和 Lombok。 My Sample實體包含四個日期,即批准日期、樣品日期和createdAtmodifiedAt ,由 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM