【发布时间】:2010-11-20 08:13:37
【问题描述】:
我是 Hibernate 的新手,正在使用 Oracle 10g 数据库。我们的表中有TIMESTAMP WITH TIMEZONE 类型的列。 Hibernate 似乎并不直接支持这种映射。有没有标准的方法来解决这个问题?
【问题讨论】:
标签: oracle hibernate time timezone timestamp
我是 Hibernate 的新手,正在使用 Oracle 10g 数据库。我们的表中有TIMESTAMP WITH TIMEZONE 类型的列。 Hibernate 似乎并不直接支持这种映射。有没有标准的方法来解决这个问题?
【问题讨论】:
标签: oracle hibernate time timezone timestamp
在这篇博文中给出了一个存储 java.util.Calendar 和时区信息的 UserType 示例:http://www.joobik.com/2010/12/mapping-dates-and-time-zones-with.html
【讨论】:
TIMESTAMP WITH TIMEZONE 是 Oracle 扩展,因此 Hibernate 不支持开箱即用。你有两个选择:
1) 更改表结构以将时区存储在单独的列中(作为 VARCHAR2)。 Hibernate 能够使用其 ID 将 map java.util.TimeZone 设为 timezone 类型。
2) 编写一个自定义类来保存时间戳和时区,以及一个自定义UserType 来保持它。如果您需要能够在查询中使用其各个属性(例如时区或时间戳),则它必须是 CompositeUserType。查看this example 让您入门;您需要更改它以实际存储时区。
【讨论】: