Hibernate @CreationTimestamp @UpdateTimestamp for Calendar

问题描述 投票:5回答:3

在我的实体中我有字段:

@UpdateTimestamp
@Column
private java.util.Calendar modifiedDate;
@CreationTimestamp
@Column
private java.util.Calendar createdDate;

这些字段由hibernate更改。我看到结果保存到DB。在没有时间的DB保存数据中,我如何解释休眠日历应该用当前日期时间保存?


附:我看到像方法注释@PreUpdate @PrePersist的解决方法,我认为我不需要。

java hibernate jpa orm
3个回答
5
投票

根据有关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;

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();
}

2
投票

我已经考虑过通过弹簧的替代解决方案,它工作正常,并且在测试中易于移动数据。 Original description

© www.soinside.com 2019 - 2024. All rights reserved.