我在jiber时间使用jadira usertype和Hibernate 4.我需要使用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的理解,我的配置是正确的。
答案 0 :(得分:0)
我设法解决了这个问题。它发生在MySQL驱动程序中的一个错误。这是a link!我将驱动程序升级到版本mysql-connector-java-6.1.6。因为我使用databaseZone =“jvm”,所以我必须在数据库属性中使用serverTimezone = UTC强制数据库为UTC。您还必须使用属性setLegacyDatetimeCode = false才能使错误修复生效