TomEE 9.0对应的PersistenceProvider类及persistence.xml配置说明
TomEE 9.0 JPA No valid providers found 问题解决方案
Nov 17, 2021 10:51:22 AM jakarta.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver log
WARNING: jakarta.persistence.spi::No valid providers found.
该报错由persistence.xml中未正确指定JPA实现的provider类导致,面向TomEE 9.0默认环境,persistence.xml中需要配置的provider参数值为 org.apache.openjpa.persistence.PersistenceProviderImpl。
完整persistence.xml配置参考
<?xml version="1.0" encoding="UTF-8"?> <persistence version="3.0" xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"> <persistence-unit name="自定义持久化单元名称" transaction-type="JTA"> <!-- 核心provider配置 --> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <!-- 替换为你自己的JPA实体类全路径 --> <class>com.yourproject.entity.YourEntity</class> <properties> <!-- 数据库连接配置,可按需修改 --> <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/你的数据库名"/> <property name="jakarta.persistence.jdbc.user" value="数据库账号"/> <property name="jakarta.persistence.jdbc.password" value="数据库密码"/> <!-- OpenJPA可选配置:支持运行时未增强的实体类,避免额外的实体增强步骤 --> <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/> </properties> </persistence-unit> </persistence>
注意事项
- TomEE 9.0基于Jakarta EE 9规范,所有JPA相关配置前缀已从旧的
javax.persistence切换为jakarta.persistence,混用旧前缀会导致provider识别失败。 - 若你自行引入了其他JPA实现的Jakarta适配版本,可替换为对应provider值:
- Hibernate 6+对应值为
org.hibernate.jpa.HibernatePersistenceProvider - EclipseLink对应值为
org.eclipse.persistence.jpa.PersistenceProvider
替换前需确保对应JPA实现依赖已正确引入到项目中。
- Hibernate 6+对应值为
内容的提问来源于stack exchange,提问作者Hendré
相关产品推荐
相关产品推荐

