Spring Boot 3中Hibernate Search与Hibernate Core版本兼容问题
Spring Boot 3.1.2 集成 Hibernate Search 启动失败问题解决
问题场景
使用Spring Boot v3.1.2 + spring-boot-starter-data-jpa依赖,添加以下Hibernate Search依赖后,应用启动失败:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-orm</artifactId> <version>5.8.2.Final</version> </dependency>
报错信息
*************************** APPLICATION FAILED TO START *************************** 描述: 尝试调用一个不存在的方法,调用位置如下: org.hibernate.search.cfg.impl.SearchConfigurationFromHibernateCore.<init>(SearchConfigurationFromHibernateCore.java:80) 不存在的方法为: 'org.hibernate.MultiTenancyStrategy org.hibernate.boot.spi.SessionFactoryOptions.getMultiTenancyStrategy()' 调用方法的类org.hibernate.search.cfg.impl.SearchConfigurationFromHibernateCore加载路径: jar:file:/Users/smaillns/.m2/repository/org/hibernate/hibernate-search-orm/5.8.2.Final/hibernate-search-orm-5.8.2.Final.jar!/org/hibernate/search/cfg/impl/SearchConfigurationFromHibernateCore.class 被调用方法的类org.hibernate.boot.spi.SessionFactoryOptions的可用路径: jar:file:/Users/smaillns/.m2/repository/org/hibernate/orm/hibernate-core/6.2.6.Final/hibernate-core-6.2.6.Final.jar!/org/hibernate/boot/spi/SessionFactoryOptions.class jar:file:/Users/smaillns/.m2/repository/org/hibernate/hibernate-core/5.2.11.Final/hibernate-core-5.2.11.Final.jar!/org/hibernate/boot/spi/SessionFactoryOptions.class 被调用方法的类层次加载路径: org.hibernate.boot.spi.SessionFactoryOptions: file:/Users/smaillns/.m2/repository/org/hibernate/orm/hibernate-core/6.2.6.Final/hibernate-core-6.2.6.Final.jar 操作建议: 修正应用的类路径,使其包含org.hibernate.search.cfg.impl.SearchConfigurationFromHibernateCore与org.hibernate.boot.spi.SessionFactoryOptions的兼容版本
原因分析
Spring Boot 3.1.2 默认集成Hibernate ORM 6.2.6.Final,而hibernate-search-orm 5.8.2.Final属于Hibernate Search 5系列,仅兼容Hibernate ORM 5.x。两者版本不匹配导致API冲突:Hibernate ORM 6.x中已移除/修改了SessionFactoryOptions.getMultiTenancyStrategy()方法,Hibernate Search 5调用该方法时触发不存在的方法错误。
解决方案
方案1:升级Hibernate Search到兼容版本
使用适配Hibernate ORM 6.x的Hibernate Search 6.x版本,推荐借助Spring Boot的依赖管理自动匹配版本,无需手动指定版本号:
<dependency> <groupId>org.hibernate.search</groupId> <artifactId>hibernate-search-mapper-orm</artifactId> </dependency> <dependency> <groupId>org.hibernate.search</groupId> <artifactId>hibernate-search-backend-lucene</artifactId> </dependency>
注意:Hibernate Search 6的API与5.x差异较大,需调整业务代码适配新API。
方案2:降级Spring Boot版本
若不想修改代码,可将Spring Boot降级到2.x系列(如2.7.x),该版本默认集成Hibernate ORM 5.x,与hibernate-search-orm 5.8.2.Final完全兼容。
内容的提问来源于stack exchange,提问作者Smaillns
相关产品推荐
相关产品推荐

