【问题标题】:Additional packagesToScan alongside with classes in persistence.xml附加 packagesToScan 以及 persistence.xml 中的类
【发布时间】:2020-01-01 03:09:22
【问题描述】:

我们有一个旧的企业系统,在persistece.xml 中定义了不同的持久性单元,许多使用@PersistenceContext(unitName = "some_of_those_unit_names") 注释的entityManager 服务。

现在我们使用 Spring Boot 从中减去较小的后端。所以,很长一段时间 jpa 配置看起来像:

    @Bean
    fun entityManagerFactory(): LocalContainerEntityManagerFactoryBean {
        return LocalContainerEntityManagerFactoryBean().also {
            it.dataSource = someDataSource
            it.persistenceUnitName = "some_of_those_unit_names"
            it.jpaVendorAdapter = HibernateJpaVendorAdapter()
            it.setJpaProperties(additionalProperties())
        }
    }

在应用程序启动时,日志中有一行: “在 some_persistence.xml 中找到具有名称 (some_of_those_unit_names) 的显式默认单位 - 覆盖本地默认单位设置”

所以 spring 使用了与旧系统相同的 persistence.xml,它们一起工作得很好。我们重用了与旧系统相同的服务,只是在 spring 配置中将它们作为@Beans 导入。

现在我的问题是。我需要添加实体,这些实体只能针对特定的 spring 后端进行管理,而不是来自旧系统或其他使用相同持久性单元名称的 spring 后端。

所以:

  • 我无法将它们添加到旧系统和其他后端使用的 persistence.xml 中
  • 我不能在创建 entityManagerFactory 时跳过设置 persistenceUnitName 或使用其他持久性单元名称 - 因为此特定名称在 @PersistenceContext 注释中的导入服务中使用
  • 如果我使用 setPackagesToScan 和 persistenceUnitName - 那么 spring 只使用相应的 persistence.xml 并忽略“setPackagesToScan”。

我可以在这里做些什么来完全覆盖 persistence.xml 或只是扩展其托管类集?

【问题讨论】:

    标签: spring hibernate spring-boot spring-data


    【解决方案1】:

    所以最后我没有使用 setPackagesToScan,而是使用了 setPersistenceUnitPostProcessors。 并创建了我的自定义后处理器,在其中添加托管类:

    class SuperCustomPersistenceUnitPostProcessor : PersistenceUnitPostProcessor {
        override fun postProcessPersistenceUnitInfo(pui: MutablePersistenceUnitInfo) {
            pui.addManagedClassName(SomeNewEntity::class.qualifiedName)
            pui.addManagedClassName(AnotherEntity::class.qualifiedName)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2023-03-08
      • 2013-04-23
      • 2011-01-18
      • 2011-12-15
      相关资源
      最近更新 更多