带时区的休眠时间戳

时间:2009-08-17 18:08:23

标签: oracle hibernate time timezone timestamp

我是Hibernate的新手,正在使用Oracle 10g数据库。我们的表中有TIMESTAMP WITH TIMEZONE类型的列。 Hibernate似乎不直接支持这种映射。是否有标准的方法来解决这个问题?

2 个答案:

答案 0 :(得分:4)

此博客文章中提供了存储带有时区信息的java.util.Calendar的UserType示例:http://www.joobik.com/2010/12/mapping-dates-and-time-zones-with.html

答案 1 :(得分:1)

TIMESTAMP WITH TIMEZONE是Oracle扩展,因此Hibernate不支持开箱即用。您有两种选择:

1)将表结构更改为将时区存储在单独的列中(如VARCHAR2)。 Hibernate可以使用其ID map java.util.TimeZone作为timezone类型。

2)编写一个自定义类来保存时间戳和时区以及一个可以保留它的自定义UserType。如果您需要能够在查询中使用其各自的属性(例如时区或时间戳),则必须为CompositeUserType。看看this example让你入门;你需要改变它来实际存储时区。