我尝试使用Hibernate在MySQL的时间戳列中存储带有毫秒的java Date
,但毫秒代码总是存储为**.000**。
Hibernate中列的定义如下:
@Type(type="timestamp")``
private Timestamp timestamp;
在DB中,列声明为TIMESTAMP(3)
我尝试了不同的组合,包括Date
,但都没有用。我使用MySQL 5.6.25,连接器/J版本5.1.37,Hibernate 4.0.1。
我已经调查了一段时间,但仍然没有找到任何解决方案,从我的工作。
任何帮助都将不胜感激。
2条答案
按热度按时间mwkjh3gx1#
您是否尝试过使用
DATETIME(3)
或TIMESTAMP(4)
?我相信这两种方法都能提供毫秒数。如果您尝试获取发生交互(如行被更新)的毫秒时间,则可以使用ON UPDATE DATETIME(3)
uxh89sit2#
Hibernate和MySql的交互似乎删除了Date/Timestamp Java属性的de毫秒精度。我也有同样的问题。
我的解决方案是“破解”Hibernate,告诉它实体属性是一个字符串,然后在setter/getter中序列化/反序列化该值
当MySQL接收到Datetime(3)列的字符串时,字符串将被正确转换,毫秒数不会丢失:-)
幸运的是,当从MySQL读取时,Datetime(3)被正确地序列化为字符串,而没有丢失毫秒
使用的字符串日期格式为“yyyy-MM-dd hh:mm:ss.SSS”
这个解决方案的想法是,不要让Hibernate处理日期,把责任委托给MySql。
不幸的是,MySQL不接受标准ISO字符串(即:“yyyy-MM-ddThh:mm:ss.SSSZ”),并且此解决方案与postgres不兼容(字符串日期格式不相同)