【发布时间】: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