2

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

例如在 db1 和 db2 中运行此查询: SELECT CUSTOMER FROM CUSTOMER CUS WHERE CUS.CODE=?1

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

请帮忙!问候

4

2 回答 2

1

您可能想查看 EclipseLink 的数据分区支持,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Partitioning

于 2013-07-15T14:34:58.763 回答
1

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

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

和 N 个实体管理器工厂 (EMF),每个 ds 具有 1 对 1 映射:

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

然后你需要每个 EMF 注入的每个 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 在运行时决定使用哪个数据库/模式

于 2013-07-13T09:50:18.240 回答