【问题标题】:How can I map TIMESTAMP WITH TIME ZONE to a Java data type using Hibernate 3.3.2GA?如何使用 Hibernate 3.3.2GA 将 TIMESTAMP WITH TIME ZONE 映射到 Java 数据类型?
【发布时间】:2011-05-03 23:21:00
【问题描述】:

如何使用Hibernate 3.3.2GA 将Oracle 列类型TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE 映射到Java 数据类型?我可以将它们中的每一个都映射到DateCalendar 数据类型吗?

【问题讨论】:

    标签: java oracle hibernate orm sqldatatypes


    【解决方案1】:

    使用joda-time。它有一个extension for hibernate

    @Columns(columns={@Column(name="startTime"),@Column(name="startTimezone")})
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTimeTZ")
    private DateTime startDateTime;
    

    但首先要确保您确实需要存储时区。更好的做法是将时间存储在固定的 TZ(例如 UTC)中,并根据当前用户偏好显示它们。人们对他们时区中的事件时间感兴趣,而不是事件源的时区。

    【讨论】:

    • TIMESTAMP WITH LOCAL TIME ZONE 不存储在固定时区(数据库时区)并将日期转换为客户端时区吗?
    • 我认为您应该避免使用 LOCAL。在您的应用程序中进行此操作,而不是数据库配置。
    • Bozho,我同意您的评论,前提是所有访问数据库的应用程序都遵循相同的固定时区约定。特别是,所有可能通过即席查询工具直接访问数据库的开发人员都必须了解约定,否则,他们可能会错误地将事件时间解释为他们自己的时区而不是 UTC。
    • 虽然可以使用 PersistentDateTimeTZ 将时区存储在数据库中是正确的,但必须注意这是一种与数据库无关的解决方案,因为它需要一个额外的时区列。它不使用 Oracle“带时区的时间戳”数据类型 (>8i)。
    • 说“人们对其时区的时间感兴趣”并不总是正确的。时间可能很多,说它应该始终转换为本地时间并不总是有效的。
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 2023-01-10
    • 2012-04-04
    • 1970-01-01
    • 2021-03-23
    • 2020-09-20
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多