У меня есть Calendar
поле в моей сущностиHibernate - Mapping java.util.Calendar к MySQL BIGINT
@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+), вы можете получить до микросекундной точности: http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds. html – Muel
@Muel Любая идея, как сказать Hibernate использовать эту точность? –
Hibernate ничего не нужно рассказывать. Это должно быть так же просто, как изменить существующий столбец базы данных, так что теперь это 'DATETIME (3)' вместо 'DATETIME (0)'. Все остальное должно работать. – Muel