我正在使用java,mysql,hibernate(3.6.x)。 在java方面我使用的是java.sql.Timestamp对象。 在mysql方面,我正在使用datetime列。
我希望hibernate使用UTC时区保存/加载这些Timestamp对象,而不管系统/ java / mysql时区。
我发现“How to store date/time and timestamps in UTC time zone with JPA and Hibernate”信息丰富,但缺少一些我很难找到的最终实施信息。
我想实现一个UtcTimestampTypeDescriptor,如该线程所示,并配置hibernate使用它而不是正常的TimestampTypeDescriptor。
如何配置hibernate以使用UtcTimestamp类型而不是默认的Timestamp类型?
答案 0 :(得分:19)
仅限MySQL ,实现自定义Hibernate类型的替代方法是将以下JDBC选项添加到JDBC连接URL:
useTimezone=true
serverTimezone=UTC
这将强制您的JDBC连接进入UTC时区,并要求MySQL从JVM时区执行转换。实际效果是您可以在JVM上保留本地时区(例如,用于打印日志消息等),而DATETIME列将保留为UTC。
例如:
<bean id="hibernateAnalysisSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<!-- Connection parameters -->
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC</prop>
...
答案 1 :(得分:3)
从your link获取课程public class UtcTimestampType extends TimestampType
并制作此代码
@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType")
public java.util.Date date;
使用注释
或
<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" />
使用* .hbm.xml