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
相关产品推荐
相关产品推荐

