如何在运行时设置架构? 我想在多个数据库中运行名称查询并汇总他们的答案。
例如在db1和db2中运行此查询: 从CUSTOMER CUS中选择CUSTOMER CUS.CODE =?1
注意:我可以在实体中设置@Table上的模式,但它不是动态的,我无法在运行时更改它。
请帮忙! 问候
答案 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