首页 > 解决方案 > 在休眠实体中用时间 api 替换 joda 时间

问题描述

我目前正在一个项目中从 jodatime 升级到 javatime api。该项目使用休眠版本 4.3.1 和 jadira.usertype 映射 org.joda.time.DateTime 和 java.sql.Timestamp ( http://jadira.sourceforge.net/usertype.core-hibernate36/apidocs/org/ jadira/usertype/dateandtime/joda/PersistentDateTime.html)。

来自其中一个实体的摘录:

@Column(name = "created_at")
private DateTime createdAt;

当服务器系统时间为“Fri Feb 7 10:09:02 CET 2020”时,这将存储到列中:“2020-02-07 09:09:02.431000”

在 joda 时间转换指南(https://blog.joda.org/2014/11/converting-from-joda-time-to-javatime.html)中指出 org.joda.DateTime 与 java 的概念相同.time.ZonedDateTime。我正在考虑用 ZonedDateTime 替换 DateTime,但有两件事引起关注和问题:hibernate 版本不支持新的 java.time 类型,并且“created_at”的列数据类型是“没有时区的时间戳” . 升级休眠还不是一种选择。

我正在考虑使用 java.sql.Timestamp 而不是 org.joda.DateTime 作为实体列

@Column(name = "created_at")
private Timestamp createdAt;

但是不确定在从/到 Timestamp 转换时使用哪种 java.time 类型而不是 org.joda.DateTime - 任何有关如何进行此操作的建议都值得赞赏!

标签: hibernatetimestamptimezonejodatimejava-time

解决方案


推荐阅读