【发布时间】:2021-04-15 14:59:56
【问题描述】:
我有一个现有的网络应用程序,不幸的是数据库中的“时间”字段没有转换为祖鲁时间。相反,我们使用org.joda.time.DateTime 作为我们的日期时间和时区封装器。
我正在从休眠 4.3.7.Final 更新到 5.3.20.Final
另外,我们让 hibernate 管理这些 DateTime 对象与数据库之间的转换,使用
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime lastUpdatedTimestamp; // <-- org.joda.time.DateTime
在休眠 5 上运行此程序会出现此错误:
10:22:11,463 ERROR [stderr] (default task-2) com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Joda date/time type `org.joda.time.DateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-joda" to enable handling (through reference chain: org.<company>.crs.model.PermissionEntity["lastUpdatedTimestamp"])
想知道为什么这会在更新到 5 之前在休眠 4 中工作? 我正在使用 joda-time 2.1 版,但能够在 2.9.7 中重现该问题
我也查看并找到了这个线程 Persist Joda-time's DateTime via Hibernate 但是,他们的解决方案是转换为 Joda 的 LocalDateTime,除非我弄错了,否则它不支持我的用例所需的时区。
编辑:我已经添加了请求的模块,但我仍然得到同样的错误。我已经使用 Joda 版本进行了测试:2.10.10、2.9.7 和 2.1
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.12.3</version>
</dependency>
【问题讨论】:
-
我相信'Joda 日期/时间类型
org.joda.time.DateTime默认不支持:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-joda”以启用处理'非常清楚。您希望我们提供什么帮助? -
我很困惑为什么它在 hibernate 4 中没有什么特别之处,但在 5 中没有?
-
这个错误与Hibernate无关,是Jackson抛出的
-
这可能只是我很愚蠢,但是,我将 Jackson 模块添加为 mvn 依赖项,但我仍然得到同样的错误。
-
该依赖项提供了一个
XxxModule类。您需要通过调用objectMapper.registerModule(new XxxModule())来注册模块