【问题标题】:Hibernate Java 8 ZonedDateTime休眠 Java 8 ZonedDateTime
【发布时间】:2018-01-22 08:40:27
【问题描述】:

我正在使用 Hibernate 和 JPA 将我的数据存储在数据库中。 现在我想从java.time 中保存一个ZonedDateTime

问题是,Hibernate 只保留日期和时间。它不关心ZoneId 或偏移量。

有什么方法可以说服 Hibernate 持久化这些信息?

【问题讨论】:

  • 您是否尝试将其作为时间戳保存在数据库中?
  • 您使用的是哪个数据库引擎?比如 MySQL 不能存储 zone,你必须自己做。
  • 我可以通过postgres 9.5.10hibernate 5.2.12 确认这个问题。自动创建的列类型是 timestamp without timezone 而我希望它是 timestamp with timezone

标签: hibernate jpa java-8 java-time zoneddatetime


【解决方案1】:

hibernate 5 通过添加 hibernate-java8 依赖来支持 java8 日期时间类型,但在 5.2.10 版本中,这移到了 hibernate 核心

(已弃用 - 改用 hibernate-core)支持 Java8 特定功能 - 主要是 Java8 日期/时间 (JSR 310)

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-java8 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
</dependency>

有关休眠和日期时间的更多信息,请参阅此

import java.time.Instant;

@Column(name = "reset_date")
private Instant resetDate = null;


setResetDate(Instant.now());

https://www.thoughts-on-java.org/hibernate-5-date-and-time/

【讨论】:

  • 这是真的,但没有回答关于 ZonedDateTime 的区域部分的问题。
  • 你在哪个数据库中测试它?
  • @aliakbarazizkhani 到目前为止,我在 h2 和 mssql 中对其进行了测试
  • @Column(name = "reset_date") private Instant resetDate = null;
猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 2019-01-21
  • 2020-09-20
  • 2018-12-21
  • 1970-01-01
  • 2018-12-24
  • 2015-11-07
  • 2018-10-23
相关资源
最近更新 更多