2010-11-03 61 views

回答

1

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

要在Hibernate处理之前在OracleConnection上这样做,最简单的方法是提供和使用o.h.c.ConnectionProvider的自定义实现。

看到这个related question

+0

也许我只是将日期标准化为目标时区,然后再将它交给Hibernate存储在表中。 – 2010-11-06 14:48:40

+0

@Derek听起来更容易。 – 2010-11-06 19:10:15

+0

Pascal,JDBC是否将JVM时区转换为数据库会话时区?我只是问这个问题在http://stackoverflow.com/questions/4123534/before-writing-a-java-date-to-an-sql-timestamp-column-does-jdbc-translate-the-da。 – 2010-11-08 11:53:35

0

休眠不允许通过注释或任何其他方式指定时区。如果您使用日历而不是日期,则可以使用HIbernate属性AccessType实施解决方法并自行实施映射。更高级的解决方案是实现一个自定义的UserType来映射日期或日历。这个博客文章解释了两种解决方案:http://dev-metal.blogspot.com/2010/11/mapping-dates-and-time-zones-with.html

+0

Joobik在你的文章中声称Hibernate翻译给定Date的时区:“因此,Hibernate做的是使用其JVM的时区调度(它运行在CET中)来转换独立于时区的java.util .Date到我们DB记录中的时区特定的日期字符串。因为CET比格林威治标准时间早一个小时,所以我们的DB日期已经增加了一个小时。“但是,根据http://stackoverflow.com/questions/4123534/before-writing-a-java-date-to-an-sql-timestamp-column-does-jdbc-translate-the-da/4124620#4124620,它是转换时区的JDBC驱动程序,而不是Hibernate。 – 2010-12-09 21:02:28

相关问题