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

时间:2013-07-13 07:44:45

标签: jpa dynamic schema

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

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

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

请帮忙! 问候

2 个答案:

答案 0 :(得分: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

在运行时决定使用哪个数据库/模式

答案 1 :(得分:1)

您可能希望了解EclipseLink的数据分区支持,

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