JPA 在运行时动态使用多个数据库模式

标签 jpa dynamic schema

如何在运行时设置模式? 我想在多个数据库中运行名称查询并汇总它们的答案。

例如,在 db1 和 db2 中运行此查询: 从客户 CUS 中选择客户,其中 CUS.CODE=?1

注意:我可以在实体中的 @Table 上设置架构,但它不是动态的,我无法在运行时更改它。

请帮忙! 问候

最佳答案

一种解决方案是设置 N 个数据源,每个数据源指向不同的数据库/模式:

DataSource ds1 = // setup ds 1
DataSource ds2 = // setup ds 2

N 个实体管理器工厂 (EMF),与每个 ds 进行一对一映射:

EntityManagerFactory emf1 = // setup emf1 mapped to ds1
EntityManagerFactory emf2 = // setup emf2 mapped to ds2

然后您需要使用每个 EMF 注入(inject)每个 DAO 类的 N 个副本:

public class CustomerDAO {

  private EntityManagerFactory emf;

  public CustomerDAO(EntityManagerFactory emf) {
    this.emf = emf;
  }

  // dao methods here..
}

CustomerDAO emf1CustomerDAO = // setup customer DAO injected with emf1
CustomerDAO emf2CustomerDAO = // setup customer DAO injected with emf2

您的应用程序现在可以通过选择 DAO 在运行时决定使用哪个数据库/模式

关于JPA 在运行时动态使用多个数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17628112/

相关文章:

javascript - 如何在 javascript on() 函数中指定动态元素?

php - 如何构建我的游戏统计跟踪数据库?

协助创建 XSD 的 Java 库?

postgresql - 在 Postgres 中 GRANT/REVOKE 时限制模式的范围

database - 如何在 kubernetes 中处理来自多个 pod 的并发事务

java - 无法在 onetomany 映射 JPA 中映射集合

使用具有 3x+ 逻辑参数的动态查找器的 Grails

mysql - Hibernate MySQLMyISAMDialect 不起作用?

java - 检测对绑定(bind)到(可编辑的)JTable 的实体的更新

Javascript 事件针对列表项而不是其元素