【问题标题】:Hibernate Returns Different Time StampsHibernate 返回不同的时间戳
【发布时间】:2016-08-31 11:56:28
【问题描述】:

我们正在使用 hibernate 4.3.0.Final 从 postgresql 9.4 中检索信息。当我们通过 pgadmin 查询数据库时,我们看到表条目是稳定的,但是当我们通过 hibernate 执行相同的查询时,我们会得到往返 3 小时的时间戳。我们的数据库保留没有时区的时间戳,我们位于 +3 时区。我们无法理解为什么 hibernate 会改变时间戳,即使在我们使用原生查询时也会发生这种情况。

注意:我们使用的是 Debian Jessie 8 和 Tomcat 8

表:

uid serial NOT NULL
time timestamp without time zone NOT NULL
type smallint NOT NULL

pom 配置:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901.jdbc4</version>
        </dependency>

【问题讨论】:

  • 应用程序和数据库在同一台服务器上还是不同的?

标签: java postgresql hibernate timestamp debian


【解决方案1】:

Hibernate 使用“JVM 时区”来表示日期。如果未明确设置,JVM 将使用操作系统上设置的时区。 您可以使用参数告诉您的 JVM 在启动时使用哪个时区

-Duser.timezone=UTC.

【讨论】:

    【解决方案2】:

    你的jvm有时区+3,试试

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
    

    但这是一个快速的 hack,你可以在你的 dao 层进行时区转换

    【讨论】:

    • 它可以工作,但是我的项目中有很多 dao 类:) 所以我打算使用 Jürden 解决方案。谢谢
    猜你喜欢
    • 2018-01-02
    • 2017-09-12
    • 2017-01-24
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2020-09-12
    • 2019-04-13
    相关资源
    最近更新 更多