Hibernate不一致地返回本地时间的时间戳

时间:2012-01-13 07:16:57

标签: hibernate timestamp

我有一个使用hibernate的spring应用程序。要求是在GMT中持久化并检索时间戳。我已使用上下文侦听器将应用程序时区设置为GMT,如下所示。

  

TimeZone.setDefault(TimeZone.getTimeZone( “GMT”));

虽然应用程序现在一直保持GMT中的时间戳,但从休眠层检索时间戳是不一致的。时间戳在PST(服务器的时区)中返回一些时间。

我的数据检索查询如下

  

查询q = entityManager.createQuery(“SELECT DISTINCT f FROM foo as f WHERE f.ID =?1 AND f.ID2 =?2 ORDER> BY ID DESC”)。setParameter(1,id1).setParameter( 2,id2);

     

q.setFirstResult(跳过).setMaxResults(顶部).getResultList();

有关解决此问题的任何想法吗?

1 个答案:

答案 0 :(得分:2)

时间戳没有任何时区。只有当您显示其(绝对)值时,才会使用时区为您提供有意义的时间表示。

每次要显示时间戳时,只需使用适当的时区(通过设置默认时区或将其设置为用于显示时间戳的日期格式)。

此外,IIRC,设置默认时区仅为当前线程设置它,并从当前线程启动线程。其他线程不受影响。