我正在设置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。
答案 0 :(得分:1)
看示例here,您的SeedStack JPA配置缺少对数据源的引用:
jpa:
units:
myUnit:
datasource: myDatasource
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto: update
datasource
属性的存在与否是让SeedStack在基于persistence.xml
的配置之间进行选择的原因(但这并不明显)。
此外,“无Spring实体管理器”异常使我认为您已经配置了SeedStack,以让Spring管理JPA事务(使用spring.manageJpa
config属性)。如果真是这样,那就与您的SeedStack JPA设置相矛盾。
在SeedStack / Spring批处理中,您可以选择:
spring.manageJpa
设置为true。这将使SeedStack管理的代码可以使用Spring配置的JPA事务管理器。让Spring管理JPA在Spring批处理作业期间提供更好的性能,因此我建议使用第二种选择(但仅适用于批处理作业)。