Quarkus 2升级至3后BlazeBit Persistence的EntityManager兼容问题
问题描述
将Quarkus项目从版本2升级至版本3(核心变更为用Jakarta API替代Javax API),按官方步骤通过CLI完成升级后,遇到BlazeBit Persistence报错:
The method create(EntityManager, Class) from the type CriteriaBuilderFactory refers to the missing type EntityManager
项目中相关代码实现如下:
package it.scdn.sale.repository; import com.blazebit.persistence.CriteriaBuilder; import com.blazebit.persistence.CriteriaBuilderFactory; import com.blazebit.persistence.view.EntityViewManager; import jakarta.inject.Inject; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; public abstract class CriteriaRepository { @PersistenceContext protected EntityManager em; @Inject protected CriteriaBuilderFactory cbf; @Inject protected EntityViewManager evm; public EntityManager getEm() { return em; } public void setEm(final EntityManager em) { this.em = em; } public CriteriaBuilderFactory getCbf() { return cbf; } public void setCbf(final CriteriaBuilderFactory cbf) { this.cbf = cbf; } public EntityViewManager getEvm() { return evm; } public void setEvm(final EntityViewManager evm) { this.evm = evm; } protected <T> CriteriaBuilder<T> initCriteria(final Class<T> tClass) { return cbf.create(em, tClass); } }
查看BlazeBit的CriteriaBuilderFactory.create方法源码后,发现该方法依赖的是javax.persistence.EntityManager,但项目升级后统一使用的是jakarta.persistence.EntityManager,这就是报错的直接原因。
方法源码片段:
/** * Like {@link CriteriaBuilderFactory#create(javax.persistence.EntityManager, java.lang.Class, java.lang.String)} but with the alias * equivalent to the camel cased result of what {@link Class#getSimpleName()} of the result class returns. * * @param entityManager The entity manager to use for the criteria builder * @param resultClass The result class of the query * @param <T> The type of the result class * @return A new criteria builder */ public <T> CriteriaBuilder<T> create(EntityManager entityManager, Class<T> resultClass);
当前POM中引入的BlazeBit依赖:
<dependency> <groupId>io.quarkus.platform</groupId> <artifactId>quarkus-blaze-persistence-bom</artifactId> <version>3.14.2</version> <type>pom</type> <scope>import</scope> </dependency>
解决办法
- 升级BlazeBit到Jakarta兼容版本:Quarkus 3要求所有依赖适配Jakarta EE,需确保使用的BlazeBit版本已完成Javax到Jakarta的迁移。检查
quarkus-blaze-persistence-bom对应的核心库版本,若当前版本仍依赖Javax API,需升级到更高版本的BOM(BlazeBit Persistence 1.6及以上版本支持Jakarta)。 - 清理依赖冲突:执行
mvn dependency:tree排查项目中是否残留javax.persistence相关依赖,通过<exclusions>标签排除这些冲突依赖,保证项目仅引入jakarta.persistence的API。 - 统一导入类型:确认项目中所有
EntityManager的导入语句都是jakarta.persistence.EntityManager,避免混用Javax版本的导入。
内容的提问来源于stack exchange,提问作者SCDN
相关产品推荐
相关产品推荐

