当前位置: 首页 > 知识库问答 >
问题:

其他软件包 ToScan 以及持久性中的类.xml

宦兴朝
2023-03-14

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

现在我们用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_the_unit_names)的显式默认单元-覆盖本地默认单元设置”

因此,Spring使用了与旧系统相同的持久性.xml,并且它们一起工作得很好。我们重用了与旧系统相同的服务,只是将它们作为@Beans导入到spring配置中。

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

所以:

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

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

共有1个答案

卢黎昕
2023-03-14

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

class SuperCustomPersistenceUnitPostProcessor : PersistenceUnitPostProcessor {
    override fun postProcessPersistenceUnitInfo(pui: MutablePersistenceUnitInfo) {
        pui.addManagedClassName(SomeNewEntity::class.qualifiedName)
        pui.addManagedClassName(AnotherEntity::class.qualifiedName)
    }
}
 类似资料:
  • 我有两个数据源和两个entityManagerFactory实例。我试图使用3.1的新功能(引导JPA entityManagerFactory没有persistence.xml通过使用PackagesToScan属性)。 为了使用正确的实体管理器工厂实例,我必须区分使用持久化单元名称和在持久化中定义PU名称。xml正在停止spring包扫描功能。 如何在使用packagesToScan功能时给出

  • 将SQL插入/更新表达式嵌入到刷新中 此功能允许将数据库列的值设置为SQL表达式,而不是文字值。它对于原子更新、调用存储过程等特别有用。您所要做的就是为属性分配一个表达式:: class SomeClass(Base): __tablename__ = "some_table" # ... value = Column(Integer) someobject = se

  • 该部分 API 将帮助您监听光环板上的各类事件,学习如何使用广播进行线程间的通信,控制脚本的停止,以写出多线程程序。 省略代码中的halocode 注意:该部分 API 省略了“halocode.”,本篇提及的所有 API 均省略了“halocode.” ,如 led_driver.off( )实际为halocode.led_driver.off()。mbuild 电子模块平台的所有功能均维护在h

  • 问题内容: 我知道如何使用Anaconda安装软件包,以及如何安装PyPi上的软件包,如手册中所述。 但是,如何才能将软件包/文件夹永久包含在Anaconda环境中,以便可以导入当前正在使用的代码,并且在重新启动后仍然可用? 我当前的方法是使用: 这不是很方便。 有什么提示吗? 提前致谢! 问题答案: 我在Anaconda论坛中找到了两个问题的答案: 1.)将模块放入站点包中,即始终位于的目录中。

  • 然而,域的其余部分是具有挑战性的,出于许多原因,我不想直接将其映射到DB表。 我尝试引入由Hibernate管理的中间bean,并从这些bean映射到我的域,当所有的关系都是从挑战到容易的部分时,这很好地工作。当Hibernate管理的“Easy”类引用映射在自定义Java代码中的“挑战性”类,而不是直接Hibernate管理时,这种方法就失败了。 这时我意识到,我找不到自定义Hibernate和

  • 问题内容: 我有一个具有固定布局的应用程序,无法更改。我想使用setuptools将其包装起来,例如编写一个脚本。 使用官方文档,我能够编写第一个模板。但是,有问题的应用程序使用了很多其他数据文件,这些文件不是任何程序包的明确组成部分。这是一个示例源树: 这是麻烦所在:中的代码 读取文件和。对于前者,我可以通过添加一个空文件将其升级到程序包并由拾取来修补该问题。但是我怎么可能增加我的呢? 所提出的