Spring 6集成Hibernate 5失败,出现NoSuchMethodError错误求助
Spring 6与Hibernate 5集成报错问题解决
问题描述
搭建Spring 6与Hibernate 5的集成环境时,使用org.springframework.orm.hibernate5.LocalSessionFactoryBean初始化会话工厂,会触发org.springframework.orm.hibernate5.SpringSessionContext的初始化,在其构造方法执行this.transactionManager = jtaPlatform.retrieveTransactionManager();时抛出以下错误:
java.lang.NoSuchMethodError: 'jakarta.transaction.TransactionManager org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform.retrieveTransactionManager()'
核心结论
是的,Spring的hibernate5集成包(属于spring-orm模块)确实依赖javax命名空间的API,和Spring 6的jakarta环境不兼容。
原因分析
- Hibernate 5基于JEE 8规范开发,其
JtaPlatform.retrieveTransactionManager()方法返回的是javax.transaction.TransactionManager; - Spring 6全面切换到Jakarta EE 9+规范,类路径中事务API已替换为
jakarta.transaction命名空间,导致Spring的hibernate5集成代码调用方法时,找不到返回类型匹配的版本,从而抛出NoSuchMethodError。
解决方案
- 优先选择升级Hibernate到6.x版本:Hibernate 6完全适配Jakarta EE规范,可与Spring 6无缝集成;
- 若必须保留Hibernate 5,需降级Spring框架到5.x版本,确保两者依赖的API命名空间一致(均为javax)。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

