我在 Hibernate 4 中使用 jadira 用户类型作为 joda 时间。我需要使用 jvm 日期时间进行存储和检索。问题是回读的日期有 2 小时的偏移量。我们在 UTC+2。日期正确地存储在数据库中。数据库是 MySQL 5。我在会话工厂配置中全局设置 databaseZone 和 javaZone,如下所示:
<prop key="jadira.usertype.autoRegisterUserTypes">true</prop>
<prop key="jadira.usertype.databaseZone">jvm</prop>
<prop key="jadira.usertype.javaZone">jvm</prop>
数据库本身配置为时区 SAST。以上述配置为例,数据库中存储的日期为 2008-01-01,读取为 2007-12-31T22:00:00.000+02:00。我也尝试过没有使用注释的全局配置,如下所示,但结果相同:
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime",
parameters = { @Parameter(name = "databaseZone", value = "jvm"),
@Parameter(name = "javaZone", value = "jvm")})
如果我在数据库上运行以下查询,
SELECT version( ) , @@time_zone , @@system_time_zone , NOW( ) , UTC_TIMESTAMP( );
我得到结果:
version : 5.5.13
@@time_zone : SYSTEM
@@system_time_zone : South Africa Standard Time
NOW() : 2013-04-03 14:33:12
UCT_TIMESTAMP() : 2013-04-03 12:33:12
我在这里想念什么。根据我从 usertype 和 joda 了解到的所有信息,我的配置是正确的。