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

如何使用jakarta.persistence.EntityManager创建Hibernate Search搜索会话?

如何使用jakarta.persistence.EntityManager创建Hibernate Search搜索会话?

嗨,这个问题我之前也踩过坑,根源就是版本兼容性的问题,我给你一步步拆解解决办法:

问题出在哪?

你用的是Spring Boot 3.x,这个版本已经完全切换到Jakarta EE规范(也就是jakarta.persistence.*包),但你当前引入的Hibernate Search 6.1.8.Final还是基于旧的Java EE规范(javax.persistence.*)开发的,所以Search.session()方法只认javax.persistence.EntityManager,自然和你注入的jakarta.persistence.EntityManager类型不匹配啦。

核心解决方案:升级Hibernate Search版本

从Hibernate Search 6.2.x版本开始,官方已经完成了向Jakarta EE的迁移,完全支持jakarta.persistence.EntityManager。你只需要修改Gradle依赖里的版本号就行:

把你Gradle中的这两行依赖:

implementation 'org.hibernate.search:hibernate-search-mapper-orm:6.1.8.Final'
implementation 'org.hibernate.search:hibernate-search-backend-lucene:6.1.8.Final'

替换成兼容Jakarta的稳定版本(比如当前最新的6.2.5.Final):

implementation 'org.hibernate.search:hibernate-search-mapper-orm:6.2.5.Final'
implementation 'org.hibernate.search:hibernate-search-backend-lucene:6.2.5.Final'

验证效果

升级完成后,你原来的代码完全不用改动:

val session = Search.session(entityManager)

现在Search.session()会直接接受jakarta.persistence.EntityManager,类型匹配的问题就彻底解决了,你的搜索逻辑可以正常跑起来。

额外小提醒

如果因为项目限制暂时没法升级到6.2.x,Spring确实提供了javax到jakarta的桥接包,但这只是临时 workaround,不推荐长期用——毕竟升级到适配Jakarta的版本才是根本解决办法,能避免后续更多兼容性问题。

备注:内容来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:57:42