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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:33:22