首页 > 解决方案 > 附加 packagesToScan 以及 persistence.xml 中的类

问题描述

我们有一个旧的企业系统,在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 或只是扩展其托管类集?

标签: springhibernatespring-bootspring-data

解决方案


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

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

推荐阅读