在PostgreSQL上使用Hibernate检索日期会为同一行返回不同的java.util.Date对象

时间:2016-08-26 10:04:54

标签: java postgresql hibernate

我正在使用HQL检索包含Date字段的一堆对象。 问题是每次运行我的进程时Hibernate都会返回不同的java.util.Date。

这是我的实体的简化版本:

@SuppressWarnings("unchecked")
private List<MyEntity> retrieveMyEntities(List<String> idsToRetrieve)
{
    Query query = session.createQuery("from MyEntity i where i.id in (:params)");
    query.setParameterList("params", idsToRetrieve);
    return query.list();
}

Postgres上的“MY_DATE”列是一个简单的“日期”列(因此,没有时间戳)。

这是我用来检索对象的方法:

retrieveMyEntities

我负责在此方法调用之外打开和关闭会话。

每次运行我的流程时,我都会得到与我在数据库中实际看到的不同的日期 (但这可能是由于时区设置不同,所以我并不在乎), 与每个流程不同 (这很令人担忧......)。

这是一个示例,将单个对象作为测试用例。 我运行了3次。

第一个流程运行:

  • 我在DB上看到的日期,行XYZ:1945-05-24
  • 使用retrieveMyEntities ...
  • 进行检索
  • date.getTime()= - 776570400000,对应 Wed May 23 22:00:00 UTC 1945

第二个流程运行:

  • 我在DB上看到的日期,同一行XYZ :1945-05-24(和以前一样)
  • 使用retrieveMyEntities ...
  • 进行检索
  • date.getTime()= - 776574000000,对应于 Wed May 23 21:00:00 UTC 1945 (与之前的流程运行不同!)

第三个​​流程:

  • 我在DB上看到的日期,同一行XYZ :1945-05-24(和以前一样)
  • 使用 <iq type="get" id="hichic@macintosh"> <retrieve xmlns="urn:xmpp:archive" with="group12@conference.macintosh"> <set xmlns="http://jabber.org/protocol/rsm"> <max>100</max> </set> </retrieve> </iq> ...
  • 进行检索
  • date.getTime()= - 776570400000,对应于 Wed May 23 22:00:00 UTC 1945 (与之前的流程运行不同,但与第一次运行相同!)

TL; DR

为什么我的进程每次运行时都会从数据库中检索不同的日期? 我正在使用PostgreSQL 9.4,Hibernate 5和Java 1.7。

0 个答案:

没有答案