Hibernate强制时间戳持续/加载为UTC

我正在使用java,mysql,hibernate(3.6.x)。 在java方面,我使用的是java.sql.Timestamp对象。 在mysql方面我正在使用datetime列。

我希望hibernate使用UTC时区保存/加载这些Timestamp对象,而不管system / java / mysql时区。

我发现“ 如何使用JPA和Hibernate以UTC时区存储日期/时间和时间戳 ”,这些信息很丰富,但缺少一些我很难找到的最终实现信息。

我想实现一个UtcTimestampTypeDescriptor,如该线程所示,并配置hibernate使用它而不是正常的TimestampTypeDescriptor。

如何配置hibernate以使用UtcTimestamp类型而不是默认的Timestamp类型?

实现自定义Hibernate类型的替代方法是将以下JDBC选项添加到JDBC连接URL:

useTimezone=true serverTimezone=UTC 

这将强制您的JDBC连接进入UTC时区,并要求MySQL从JVM时区执行转换。 实际效果是您可以在JVM上保留本地时区(例如,用于打印日志消息等),而DATETIME列将保留为UTC。

例如:

     com.mysql.jdbc.Driver jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC ... 

get class public class UtcTimestampType extends TimestampType从您的链接 public class UtcTimestampType extends TimestampType
并制作此代码

 @org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType") public java.util.Date date; 

使用注释

要么

  

使用* .hbm.xml