我正在使用 java、mysql、hibernate (3.6.x)。 在 java 方面,我使用 java.sql.Timestamp 对象。 在 mysql 方面,我使用的是日期时间列。
我希望 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 类型?
最佳答案
仅适用于 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>
...
关于java - hibernate 强制时间戳以保持/加载为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9823411/