在我的实体中我有字段:
@UpdateTimestamp
@Column
private java.util.Calendar modifiedDate;
@CreationTimestamp
@Column
private java.util.Calendar createdDate;
这些字段由hibernate更改。我看到结果保存到DB。在没有时间的DB保存数据中,我如何解释休眠日历应该用当前日期时间保存?
附:我看到像方法注释@PreUpdate
@PrePersist
的解决方法,我认为我不需要。
根据有关Calendar数据类型的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;
我想你可以使用@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();
}
我已经考虑过通过弹簧的替代解决方案,它工作正常,并且在测试中易于移动数据。 Original description。