【问题标题】:Hibernate Timestamp with Timezone带有时区的休眠时间戳
【发布时间】:2010-11-20 08:13:37
【问题描述】:

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

【问题讨论】:

    标签: oracle hibernate time timezone timestamp


    【解决方案1】:

    在这篇博文中给出了一个存储 java.util.Calendar 和时区信息的 UserType 示例:http://www.joobik.com/2010/12/mapping-dates-and-time-zones-with.html

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 根据 Kline 等人的 SQL in a Nutshell,TIMESTAMP WITH TIMEZONE 是 SQL 2003 定义的类型。因此,它不是 Oracle 扩展。
    • 然后将其称为“Oracle 实现的 SQL 2003 扩展”。 Hibernate 仍然不支持它
    • java.util.Calendar 包含时间戳和时区信息。因此,joobik 的解决方案对我来说似乎更好。
    猜你喜欢
    • 2010-11-02
    • 2018-09-28
    • 2019-01-10
    • 2011-08-24
    • 2021-12-26
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多