使用HibernateJPA和JDK日期进行不需要的自动时区转换

使用HibernateJPA和JDK日期进行不需要的自动时区转换,第1张

使用Hibernate / JPA和JDK日期进行不需要的自动时区转换

我自己遇到了这个。我看到的是,即使您已在日期中将UTC指定为时区(并且可以通过打印出来并在末尾看到“
Z”来查看),但出于某种原因,JVM还是想接管并使用JVM的默认时区为您转换日期。

无论如何,您需要一个自定义映射来解决此问题。尝试使用 Jadira:

@Entity@Table(name = "MY_TABLE")public class MyTable implements Serializable {  . . .  @Column(name = "START_DATE")  @Type(type="org.jadira.usertype.dateandtime.legacyjdk.PersistentDate")  private Date startDate;  public Date getStartDate() {    return startDate;  }  public void setStartDate(Date startDate) {    this.startDate = startDate;  }  . . .}

默认情况下,Jadira的

PersistentDate
类在将日期转换为要存储在数据库中的毫秒值时,使用UTC作为时区。您可以指定其他时区,但听起来像是要存储UTC。

就像您的帖子中的注释所暗示的那样,有时您用来查询数据库的工具正在为您进行愚蠢的自动(基于我的JDK默认TZ的转换),使您相信该值仍然不正确。

您也可以尝试存储原始值(作为INTEGER),只是为了使自己确信已存储了正确的毫秒值。

HTH,

摩西



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4977233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存