我试图使用Hibernate以毫秒精度持久化Date对象。
private Date date = new Date();
@Column(columnDefinition="DATETIME(3)")
public Date getDate() {
return date;
}
在数据库中,毫秒组件始终为.000。使用Hibernate存储带有毫秒精度的Date对象是否不可能?
java.util.date只能持久化到秒级,因为ORM将其映射为SQL DATE类型,该类型可能不包含毫秒(至少在我熟悉的实现中是这样)。
java.sql.timestamp支持分数秒。
如果可以的话,我肯定会考虑使用新的Java 8日期库(或者如果无法使用Java 8,则使用joda)。它们更好。
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
。 - StuPointerException尝试更新数据库连接器版本(.jar或依赖项,如果您使用构建自动化工具)。这对我有用。我在MySQL中使用了简单的java.util.Date
和DATETIME(3)。
这与 java.util.Date 和 java.sql.Timestamp 的文档行为一致。
java.util.Date 存储到秒,而 java.sql.Timestamp 是一个薄包装器,以容纳 SQL 时间戳值的纳秒值。如果您阅读 Timestamp javadoc 上的注释,它清楚地说明了这种差异。
如果您不想丢失秒分数,并且不想调查替代日期库(例如Joda Time),则需要将字段设置为 java.sql.Timestamp,并使用当前日期的毫秒值构造初始值。
java.util.Date date = new java.util.Date();
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
java.util.Date
已经包含毫秒精度。这在数据库和ORM层面上都应该可以正常工作。你使用的是哪个版本的Mysql和Hibernate? - Nikhil Sahu