使用Hibernate在MySQL时间戳列中存储毫秒数

laik7k3q  于 2022-11-24  发布在  Mysql
关注(0)|答案(2)|浏览(233)

我尝试使用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。
我已经调查了一段时间,但仍然没有找到任何解决方案,从我的工作。
任何帮助都将不胜感激。

mwkjh3gx

mwkjh3gx1#

您是否尝试过使用DATETIME(3)TIMESTAMP(4)?我相信这两种方法都能提供毫秒数。如果您尝试获取发生交互(如行被更新)的毫秒时间,则可以使用ON UPDATE DATETIME(3)

uxh89sit

uxh89sit2#

Hibernate和MySql的交互似乎删除了Date/Timestamp Java属性的de毫秒精度。我也有同样的问题。
我的解决方案是“破解”Hibernate,告诉它实体属性是一个字符串,然后在setter/getter中序列化/反序列化该值

@Column(name="time")
private String time
...
public Date getTime(){
  return strTodate( this.time );
}
public void setTime(Date value){
  this.time = dateToStr( value );
}

当MySQL接收到Datetime(3)列的字符串时,字符串将被正确转换,毫秒数不会丢失:-)
幸运的是,当从MySQL读取时,Datetime(3)被正确地序列化为字符串,而没有丢失毫秒
使用的字符串日期格式为“yyyy-MM-dd hh:mm:ss.SSS”
这个解决方案的想法是,不要让Hibernate处理日期,把责任委托给MySql。
不幸的是,MySQL不接受标准ISO字符串(即:“yyyy-MM-ddThh:mm:ss.SSSZ”),并且此解决方案与postgres不兼容(字符串日期格式不相同)

相关问题