使用JPA插件找不到SeedStack“ persistence.xml”

时间:2019-07-16 10:10:21

标签: java jpa persistence persistence.xml seedstack

我正在设置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。

1 个答案:

答案 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批处理中,您可以选择:

  • 让SeedStack管理JPA。在这种情况下,您可以使用SeedStack配置JPA,并仅在SeedStack托管的代码(业务服务,存储库等)中使用JPA(包括@Transactional批注)。
  • 让Spring管理JPA。在这种情况下,您可以使用Spring配置JPA(不使用任何SeedStack配置),并将spring.manageJpa设置为true。这将使SeedStack管理的代码可以使用Spring配置的JPA事务管理器。

让Spring管理JPA在Spring批处理作业期间提供更好的性能,因此我建议使用第二种选择(但仅适用于批处理作业)。