jadira usertype joda time从数据库返回不正确的日期时间

时间:2013-04-03 12:43:37

标签: jodatime usertype

我在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的理解,我的配置是正确的。

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。它发生在MySQL驱动程序中的一个错误。这是a link!我将驱动程序升级到版本mysql-connector-java-6.1.6。因为我使用databaseZone =“jvm”,所以我必须在数据库属性中使用serverTimezone = UTC强制数据库为UTC。您还必须使用属性setLegacyDatetimeCode = false才能使错误修复生效