【问题标题】:Hibernate @CreationTimestamp @UpdateTimestamp for Calendar休眠 @CreationTimestamp @UpdateTimestamp 用于日历
【发布时间】:2017-02-21 12:00:56
【问题描述】:
在我的实体中,我有字段:
@UpdateTimestamp
@Column
private java.util.Calendar modifiedDate;
@CreationTimestamp
@Column
private java.util.Calendar createdDate;
这些字段由休眠更改。我看到结果保存到数据库。在没有时间的数据库中保存数据,我如何解释休眠日历应该与当前日期时间一起保存?
附:
我看到了诸如方法注释之类的解决方法@PreUpdate@PrePersist 我不认为我需要这些。
【问题讨论】:
标签:
java
hibernate
jpa
orm
【解决方案1】:
根据有关日历数据类型的 JPA 规范:
@Temporal - 必须为持久字段或属性指定此注释
类型为 java.util.Date 和 java.util.Calendar。
在您的情况下,您应该使用:
@Temporal(TemporalType.TIMESTAMP)
两个字段。
另一种解决方案是简单地从 java.util.Calendar 更改为 java.sql.Timestamp:
@UpdateTimestamp
@Column
private java.sql.Timestamp modifiedDate;
@CreationTimestamp
@Column
private java.sql.Timestamp createdDate;
【解决方案2】:
我认为您可以使用 @CreationTimestamp 和 @UpdateTimestamp 注释,但您必须将 TemporalType 指定为时间戳。
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createdDate")
private java.util.Calendar createdDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modifiedDate")
private java.util.Calendar modifiedDate;
否则,如您所说,您可以使用@PrePersist 和@PreUpdate,如下所示:
@PrePersist
protected void onCreate() {
created = Calendar.getInstance();
}
@PreUpdate
protected void onUpdate() {
updated = Calendar.getInstance();
}