spring - 附加 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
- 在创建 entityManagerFactory 或使用另一个持久性单元名称时,我不能跳过设置 persistenceUnitName - 因为此特定名称在 @PersistenceContext 注释中的导入服务中使用
- 如果我使用 setPackagesToScan AND persistenceUnitName - 那么 spring 只使用相应的 persistence.xml 并忽略“setPackagesToScan”。
我可以在这里做些什么来完全覆盖 persistence.xml 或只是扩展其托管类集?
解决方案
所以最后我没有使用 setPackagesToScan,而是使用了 setPersistenceUnitPostProcessors。并创建了我的自定义后处理器,在其中添加了托管类:
class SuperCustomPersistenceUnitPostProcessor : PersistenceUnitPostProcessor {
override fun postProcessPersistenceUnitInfo(pui: MutablePersistenceUnitInfo) {
pui.addManagedClassName(SomeNewEntity::class.qualifiedName)
pui.addManagedClassName(AnotherEntity::class.qualifiedName)
}
}
推荐阅读
- javascript - 更改数组中所有输入的值
- mqtt - 获取保留消息列表
- linux - 如何挂载 nginx docker 的 /etc/nginx/ 目录来托管虚拟机?
- install4j - 安装程序图像的 Install4j Web url
- asp.net-core - IDX20803:无法从 - 多权限获取配置
- php - 如何在列 SQL 中获取 5 个最新值和计数
- google-cloud-dataflow - 触发后在条件下将元素发送到下一个窗口
- python - Python overlapping sliding dataframe
- c++ - C++ 中带有派生参数的函数
- database - 两个 sonarqube 实例可以有相同的数据库服务器吗