Spring Boot 3.3.3集成测试失败求助(关联Hibernate 6.5.2)
Spring Boot 3.3.3 + Mockito 5.14.2 集成测试兼容性问题解答
确实有不少用户在使用Spring Boot 3.3.x搭配Mockito 5.x版本时遇到过完全相同的问题,核心原因是Hibernate 6.5.x的字节码增强逻辑与Mockito依赖的ByteBuddy版本存在兼容性冲突。
问题本质
Hibernate 6.5.2.Final(Spring Boot 3.3.3内置版本)引入了$$_hibernate_setUseTracker(boolean)这类动态生成的字节码方法,而Mockito 5.14.2使用的ByteBuddy版本在处理这类方法时存在逻辑冲突,最终导致JoinedSubclassEntityPersister无法实例化,进而引发EntityManagerFactory创建失败。
可行的临时解决方案
- 回退Hibernate版本:如你所做的,将Hibernate Core版本指定为Spring Boot 3.2.2内置的
6.4.1.Final,这是最直接且验证有效的临时修复方式。可以在构建文件中强制指定版本:<!-- Maven 示例 --> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.1.Final</version> </dependency> - 升级Mockito版本:将Mockito Core升级到
5.15.0及以上版本,部分用户反馈该版本调整了ByteBuddy的适配逻辑,能够解决与Hibernate 6.5.x的兼容性问题。 - 禁用Hibernate字节码跟踪器:如果业务场景允许,可在测试环境配置文件中添加以下配置,关闭Hibernate的字节码跟踪功能:
注意:该配置可能会影响Hibernate的部分性能优化特性,需在测试环境验证业务逻辑不受影响后再使用。# application-test.properties spring.jpa.properties.hibernate.bytecode.use_tracker=false
官方进展
Spring Boot团队已关注到该兼容性问题,后续小版本(如3.3.4)可能会通过调整内置Hibernate版本或协调Mockito适配来彻底解决,建议关注Spring Boot官方发布说明。
内容的提问来源于stack exchange,提问作者julus
相关产品推荐
相关产品推荐

