【发布时间】:2013-07-15 07:42:16
【问题描述】:
我的实体中有一个Calendar 字段
@Column(nullable = false)
private Calendar transmissionDate;
需要毫秒精度。照原样,Hibernate 生成一个模式,将此字段映射到一个
+-------------------+--------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+-------------------+--------------+------+-----+---------+
| transmission_date | datetime | NO | | NULL |
+-------------------+--------------+------+-----+---------+
在 MySQL 中。 The datetime type in MySQL discards everything after the second,所以我失去了精确度。我现在一直在使用的解决方案是
@Column(nullable = false)
private Long transmissionDate;
并在需要时从中生成日历实例。
这是一个巨大的麻烦,我想知道 Hibernate 是否有可以克服它的功能。 This question 展示了如何使用自定义类型,但是,在实现它时,Hibernate 仍然映射到 datetime 列类型。
如何在我的实体中仍然使用Calendar 类型的同时保持毫秒精度?
【问题讨论】:
-
如果您使用的是更新版本的 MySQL (5.6.4+),您可以达到微秒级精度:dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html
-
@Muel 知道如何告诉 Hibernate 使用这种精度吗?
-
Hibernate 不需要被告知任何事情。它应该像修改现有数据库列一样简单,现在它是
DATETIME(3)而不是DATETIME(0)。其他一切都应该正常工作。