0

在我的 Spring 应用程序中使用 JPA Hibernate Annotions。

在那个mysql数据库中有一个表和一列称为CreateDate

插入记录时将添加此列值。

那么他们是否有任何用于创建当前日期和时间的注释?

否则在我们的 Hibernate bean 编写 setter 方法中添加

    private Date currrent;
    public void setCurrent(Date current)
    {
      this.current = new Date();
    }
4

3 回答 3

2

我想你正在寻找这个: -

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "curr", length = 10)
public Date getCurrrent() {
    return this.currrent;
}
于 2013-04-26T07:17:34.823 回答
2

Jelies提到的是正确的方法。您只需实例化日期对象

private Date currrent = new Date(); 

在对象创建期间,然后将其持久化。

@Temporal(TemporalType.TIMESTAMP)除此之外,如果您有机会将该字段current与任何 java.util.Date 对象进行比较,因为保存的字段将作为 java.sql.Timestamp 加载,则用于存储日期和时间是不安全的。原因在这里提到。

注意:此类型是 java.util.Date 和单独的纳秒值的组合。只有整数秒存储在 java.util.Date 组件中。小数秒 - 纳秒 - 是分开的。Timestamp.equals(Object) 方法在传递 java.util.Date 类型的值时永远不会返回 true,因为日期的 nanos 组件是未知的。因此,Timestamp.equals(Object) 方法相对于 java.util.Date.equals(Object) 方法不是对称的。此外,hashcode 方法使用底层的 java.util.Date 实现,因此在其计算中不包括 nanos。由于上面提到的 Timestamp 类和 java.util.Date 类之间的差异,建议代码不要将 Timestamp 值一般视为 java.util.Date 的实例。

解决方法是使用TypeDef。这篇文章讨论了这个问题和解决方法。那里使用的代码对您来说已经足够好了。

于 2013-04-26T08:55:03.873 回答
1

我认为实现这一目标的最简单方法是使用 new Date() 初始化您的字段:

private Date currrent = new Date();

恕我直言,我不建议更改 setter 方法的行为,其他开发人员不会期望如此。

如果您希望在实体被持久化/更新之前立即填充此字段,您可以定义一个带有@PrePersist@PreUpdateJPA 注释的方法来填充current属性。

于 2013-04-26T07:44:35.537 回答