You need to enable JavaScript to run this app. Quarkus基于persistence.xml配置时无法识别@Entity实体类问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus基于persistence.xml配置时无法识别@Entity实体类问题排查

问题根因

Quarkus 1.8及之后版本,当用户自定义persistence.xml时,框架会关闭默认的实体类自动扫描逻辑,导致实体类无法被识别,最终抛出Not an entity异常,底层报错为:

Caused by: java.lang.IllegalArgumentException: Not an entity: ...
解决方案

方案1:保留现有persistence.xml

在现有persistence.xml的persistence-unit节点下补充实体扫描配置,可选两种实现方式:

  • 方式一:显式声明所有实体类全路径
    在<provider>标签之后、<properties>标签之前添加所有实体类的<class>配置,示例:
<class>com.yourbusiness.entity.User</class>
<class>com.yourbusiness.entity.Role</class>
<!-- 依次添加项目中所有的实体类全路径 -->
  • 方式二:开启Hibernate自动扫描属性
    在<properties>节点中新增自动扫描配置项:
<property name="hibernate.archive.autodetection" value="class"/>

方案2:废弃persistence.xml,迁移配置到application.properties(更符合Quarkus设计规范)

你需要的enable_lazy_load_no_trans等Hibernate配置完全可以直接在Quarkus的配置文件中声明,不需要依赖persistence.xml,迁移后的配置示例:

# 现有环境变量QUARKUS_DATASOURCE_*会自动生效,无需额外修改
quarkus.datasource.db-kind=postgresql
quarkus.hibernate-orm.dialect=org.hibernate.dialect.PostgreSQLDialect
quarkus.hibernate-orm.enable_lazy_load_no_trans=true
quarkus.hibernate-orm.log.sql=false
quarkus.hibernate-orm.log.format-sql=false
quarkus.hibernate-orm.jdbc.time_zone=UTC

迁移完成后删除项目中的persistence.xml即可,Quarkus会自动扫描所有实体类,无需额外配置。

内容的提问来源于stack exchange,提问作者Jonathas Gabriel Dipp Harb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 06:45:02