【发布时间】:2021-02-15 05:24:19
【问题描述】:
我正在尝试使用带有 Postgres 的 hibernate 和 JPA 创建一个表,并且在其中一个 POJO 中,我有一个数据类型为 Date(java.util.date) 的时间戳属性。当我在 Postgres 中看到它时,它被转换为数据类型“没有时区的日期”,而我想要带时区的日期,我现在该怎么办?
【问题讨论】:
标签: java postgresql hibernate spring-data-jpa
我正在尝试使用带有 Postgres 的 hibernate 和 JPA 创建一个表,并且在其中一个 POJO 中,我有一个数据类型为 Date(java.util.date) 的时间戳属性。当我在 Postgres 中看到它时,它被转换为数据类型“没有时区的日期”,而我想要带时区的日期,我现在该怎么办?
【问题讨论】:
标签: java postgresql hibernate spring-data-jpa
我们有不同类型的Date:
为了将我们的变量映射到特定的类型,我们必须使用@Temporal标签:
小例子:
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Temporal(TemporalType.TIMESTAMP)
private Date utilDate;
@Temporal(TemporalType.DATE)
private Calendar utilCalendar;
// Getters, Setters ...
}
所以我建议你将它保存为 TIMESTAMP
要在属性文件中指定时区,请使用:
spring.jpa.properties.hibernate.jdbc.time_zone = UTC
如果您不想使用@Timestamp,只需以这种方式声明您的变量/列:
@Column
private LocalDateTime created;
Hibernate 会自动将其映射到 Postgresql 的时间戳中。
【讨论】:
LocalDateTime,因为它是新 Time api 的一部分。不过,您的评论添加了另一个解决方案。