如何指示Hibernate使用本地时区以外的时区将Java日期映射到Oracle日期列?

如何指示Hibernate使用本地时区以外的时区将Java日期映射到Oracle日期列?,java,oracle,hibernate,date,timezone,Java,Oracle,Hibernate,Date,Timezone,如何指示使用本地时区以外的时区将Java日期映射到Oracle列和从Oracle列映射Java日期?我不确定,但我认为您必须使用OracleConnection.setSessionTimeZone(String regionName)方法来设置会话时区 要在Hibernate处理之前在OracleConnection上执行此操作,最干净的方法是提供并使用o.h.c.ConnectionProvider的自定义实现 请参见。我不确定,但我认为您必须使用OracleConnection.setSe

如何指示使用本地时区以外的时区将Java日期映射到Oracle列和从Oracle列映射Java日期?

我不确定,但我认为您必须使用
OracleConnection.setSessionTimeZone(String regionName)
方法来设置会话时区

要在Hibernate处理之前在
OracleConnection
上执行此操作,最干净的方法是提供并使用
o.h.c.ConnectionProvider
的自定义实现


请参见。

我不确定,但我认为您必须使用
OracleConnection.setSessionTimeZone(String regionName)
方法来设置会话时区

要在Hibernate处理之前在
OracleConnection
上执行此操作,最干净的方法是提供并使用
o.h.c.ConnectionProvider
的自定义实现


见此。

Hibernate不允许通过注释或任何其他方式指定时区。如果使用日历而不是日期,则可以使用HIbernate属性AccessType并自己实现映射来实现解决方法。更高级的解决方案是实现自定义用户类型来映射日期或日历。这两种解决方案都在这篇博文中进行了解释:

Hibernate不允许通过注释或任何其他方式指定时区。如果使用日历而不是日期,则可以使用HIbernate属性AccessType并自己实现映射来实现解决方法。更高级的解决方案是实现自定义用户类型来映射日期或日历。这两种解决方案都在这篇博文中进行了解释:

也许在将日期交给Hibernate存储在表中之前,我只需将其标准化为目标时区。Pascal,JDBC是否将JVM时区转换为数据库会话时区?我刚刚在问了这个问题。根据我对另一个问题的回答,时区转换似乎是特定于JDBC驱动程序实现的。@Derek我承认,我不知道JDBC规范对此有何规定。但那是我首先要看的地方。然后,我将检查给定JDBC驱动程序的一致性!因此,JDBC不支持带有时间僵尸的SQL类型
TIMESTAMP
,也不识别包含时区的
TIMESTAMP
文本。所以,时区解释必须完全依赖于JDBC驱动程序的实现!在将日期交给Hibernate存储在表中之前,也许我只需要将其标准化为目标时区。Pascal,JDBC是否将JVM时区转换为数据库会话时区?我刚刚在问了这个问题。根据我对另一个问题的回答,时区转换似乎是特定于JDBC驱动程序实现的。@Derek我承认,我不知道JDBC规范对此有何规定。但那是我首先要看的地方。然后,我将检查给定JDBC驱动程序的一致性!因此,JDBC不支持带有时间僵尸的SQL类型
TIMESTAMP
,也不识别包含时区的
TIMESTAMP
文本。所以,时区解释必须完全依赖于JDBC驱动程序的实现!Joobik,在你的文章中,你声称Hibernate翻译给定日期的时区:“那么Hibernate所做的,就是使用它的JVM的时区时间表(在CET中运行)将独立于时区的java.util.Date转换为我们数据库记录中特定于时区的日期字符串。因为CET比GMT早一个小时,所以我们的数据库日期增加了一个小时。“但是,根据,是JDBC驱动程序翻译时区,而不是Hibernate.Joobik,在您的文章中,您声称Hibernate翻译给定日期的时区:“所以Hibernate所做的是,使用其JVM(在CET中运行)的时区时间表将时区无关的java.util.Date转换为我们数据库记录中特定于时区的日期字符串。因为CET比GMT早一小时,所以我们的数据库日期中添加了一小时。”然而,据介绍,是JDBC驱动程序转换时区,而不是Hibernate。