为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2023-03-31 09:37:24
我正在设置一个 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 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

查看此处的示例,您的 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 管理的代码(业务服务、存储库等)中使用 JPA(包括 @Transactional 注释)。

  • 让 Spring 管理 JPA。在那种情况下,您使用 Spring 配置 JPA(没有任何 SeedStack 配置)并设置spring.manageJpa为 true。这将允许 SeedStack 管理的代码使用 Spring 配置的 JPA 事务管理器。

让 Spring 管理 JPA 在 Spring 批处理作业期间提供更好的性能,因此我推荐第二个选项(但仅适用于批处理作业)。


查看完整回答
反对 回复 2023-03-31
  • 1 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信