以毫秒精度在Hibernate中存储日期

时间:2015-09-22 11:38:13

标签: java mysql hibernate

我正在尝试以毫秒精度在Hibernate中持久化Date对象。

private Date date = new Date();

@Column(columnDefinition="DATETIME(3)")
public Date getDate() {
    return date;
}

但在数据库中,毫秒组件始终为.000。是否根本无法使用Hibernate存储具有毫秒精度的Date对象?

3 个答案:

答案 0 :(得分:1)

java.util.date只会持续到第二个,因为它被ORM映射到SQL DATE类型,可能不包含毫秒(至少在我熟悉的实现中)。

java.sql.timestamp支持小数秒。

如果你能够(或者如果你不能使用Java 8的joda),我肯定会考虑使用新的Java 8日期库。他们好多了。

答案 1 :(得分:0)

这与java.util.Datejava.sql.Timestamp

的记录行为一致

java.util.Date存储到第二个,而java.sql.Timestamp是一个瘦包装器,以容纳SQL时间戳值的纳秒值。如果您阅读时间戳javadoc上的注释,它会清楚地说明这种差异。

如果您不想丢失第二部分,并且不想调查其他日期库(例如Joda Time),则需要将该字段设为java.sql.Timestamp,并使用构造初始值的当前日期的毫秒值

java.util.Date date = new java.util.Date();
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());

答案 2 :(得分:0)

尝试更新数据库连接器版本(.jar或依赖关系,以防您使用构建自动化工具)。它对我有用。我在MySQL中使用了简单的java.util.Date和DATETIME(3)。