You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring5+Hibernate5+Java8环境下JodaTime兼容问题求助

解决方案:Spring5+Hibernate5下JodaTime映射的AbstractMethodError问题

这个问题我在迁移Spring4→Spring5、Hibernate4→Hibernate5的项目时也碰到过,核心原因是你用的usertype.jodatime:2.0.1是针对Hibernate 4.x开发的,而Hibernate 5.x对UserType接口做了API更新,新增了几个方法(比如带SharedSessionContractImplementor参数的nullSafeSet重载),旧版本的usertype库没有实现这些方法,所以启动时抛出AbstractMethodError。

下面是具体的解决步骤,完全不需要切换到Java8时间库,符合你现有代码的限制:

  • 升级usertype.jodatime到兼容Hibernate5的版本
    从2.1版本开始,usertype.jodatime正式支持Hibernate5,推荐直接升级到2.2.0(和你的joda-time:2.9.9完全兼容)。修改你的依赖配置:
    Maven示例:

    <dependency>
        <groupId>org.jadira.usertype</groupId>
        <artifactId>usertype.jodatime</artifactId>
        <version>2.2.0</version>
    </dependency>
    

    Gradle示例:

    implementation 'org.jadira.usertype:usertype.jodatime:2.2.0'
    
  • 无需修改实体类代码
    升级后,你原来的@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")注解可以完全保留,新版本的库依然支持这个映射类,不需要改动任何实体代码。

  • 排查依赖冲突(可选)
    如果升级后还是报错,用依赖分析工具检查项目中是否残留了Hibernate4的相关依赖(比如旧版hibernate-core)。以Maven为例,执行mvn dependency:tree命令,确保hibernate-core:5.2.16.Final是唯一的Hibernate核心依赖,排除掉其他冲突版本。

如果不想升级usertype库,也可以自己实现适配Hibernate5的UserType来映射JodaTime,但显然直接升级官方维护的库更省心,也能避免后续的兼容性问题。

内容的提问来源于stack exchange,提问作者Bee Hive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:08:03