使用 JPA 加载项未找到 SeedStack "persistence.xml"
SeedStack "persistence.xml" not found using JPA add-on
我正在设置一个 SeedStack 批处理应用程序,我正在尝试在没有 persistence.xml 的情况下使用 JPA,但会自动检测 JPA 类。
但是,我有以下例外情况:
HHH000318: Could not find any META-INF/persistence.xml file in the classpath
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named myUnit
我在 application.yaml 中有这个属性:
# This configuration file can override main configuration for integration tests
jdbc:
datasources:
myDatasource:
provider: org.seedstack.jdbc.internal.datasource.HikariDataSourceProvider
url: jdbc:postgresql://localhost:5432/CNVT
user: postgres
password : admin
jpa:
units:
myUnit:
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto: update
classes:
org:
generated:
project:
domain:
model:
jpaUnit: myUnit
此外,当我添加 persistence.xml 时,将创建 JPA 单元:
o.h.e.t.j.p.i.JtaPlatformInitiator HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
org.seedstack.jpa.internal.JpaPlugin Creating JPA unit myUnit from persistence.xml
org.seedstack.jpa.internal.JpaPlugin Created 1 JPA unit(s)
但是,我有这个例外:
org.seedstack.seed.SeedException: [SPRING] No spring entitymanager
我想将 JPA 与 SeedStack 一起正确使用,而无需执行 persistence.xml。
查看示例 here,您的 SeedStack JPA 配置缺少对数据源的引用:
jpa:
units:
myUnit:
datasource: myDatasource
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto: update
datasource
属性的存在与否使 SeedStack 在是否基于 persistence.xml
配置之间做出选择(但这并不明显)。
此外,"No spring entitymanager" 异常让我认为您已将 SeedStack 配置为让 Spring 管理 JPA 事务(使用 spring.manageJpa
配置属性)。如果是这样,则它与您的 SeedStack JPA 设置相矛盾。
在 SeedStack/Spring 批次中,您可以选择:
- 让 SeedStack 管理 JPA。在那种情况下,您使用 SeedStack 配置 JPA 并仅在 SeedStack-managed 代码(业务服务、存储库等)中使用 JPA(包括 @Transactional 注释)。
- 让 Spring 管理 JPA。在这种情况下,您使用 Spring 配置 JPA(没有任何 SeedStack 配置)并将
spring.manageJpa
设置为 true。这将允许 SeedStack-managed 代码使用 Spring-configured JPA 事务管理器。
让 Spring 管理 JPA 在 Spring 批处理作业期间提供更好的性能,因此我推荐第二个选项(但仅适用于批处理作业)。
我正在设置一个 SeedStack 批处理应用程序,我正在尝试在没有 persistence.xml 的情况下使用 JPA,但会自动检测 JPA 类。
但是,我有以下例外情况:
HHH000318: Could not find any META-INF/persistence.xml file in the classpath
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named myUnit
我在 application.yaml 中有这个属性:
# This configuration file can override main configuration for integration tests
jdbc:
datasources:
myDatasource:
provider: org.seedstack.jdbc.internal.datasource.HikariDataSourceProvider
url: jdbc:postgresql://localhost:5432/CNVT
user: postgres
password : admin
jpa:
units:
myUnit:
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto: update
classes:
org:
generated:
project:
domain:
model:
jpaUnit: myUnit
此外,当我添加 persistence.xml 时,将创建 JPA 单元:
o.h.e.t.j.p.i.JtaPlatformInitiator HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
org.seedstack.jpa.internal.JpaPlugin Creating JPA unit myUnit from persistence.xml
org.seedstack.jpa.internal.JpaPlugin Created 1 JPA unit(s)
但是,我有这个例外:
org.seedstack.seed.SeedException: [SPRING] No spring entitymanager
我想将 JPA 与 SeedStack 一起正确使用,而无需执行 persistence.xml。
查看示例 here,您的 SeedStack JPA 配置缺少对数据源的引用:
jpa:
units:
myUnit:
datasource: myDatasource
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto: update
datasource
属性的存在与否使 SeedStack 在是否基于 persistence.xml
配置之间做出选择(但这并不明显)。
此外,"No spring entitymanager" 异常让我认为您已将 SeedStack 配置为让 Spring 管理 JPA 事务(使用 spring.manageJpa
配置属性)。如果是这样,则它与您的 SeedStack JPA 设置相矛盾。
在 SeedStack/Spring 批次中,您可以选择:
- 让 SeedStack 管理 JPA。在那种情况下,您使用 SeedStack 配置 JPA 并仅在 SeedStack-managed 代码(业务服务、存储库等)中使用 JPA(包括 @Transactional 注释)。
- 让 Spring 管理 JPA。在这种情况下,您使用 Spring 配置 JPA(没有任何 SeedStack 配置)并将
spring.manageJpa
设置为 true。这将允许 SeedStack-managed 代码使用 Spring-configured JPA 事务管理器。
让 Spring 管理 JPA 在 Spring 批处理作业期间提供更好的性能,因此我推荐第二个选项(但仅适用于批处理作业)。