如何在运行时设置模式?我想在多个数据库中运行名称查询并汇总他们的答案。
例如在 db1 和 db2 中运行此查询: SELECT CUSTOMER FROM CUSTOMER CUS WHERE CUS.CODE=?1
注意:我可以在实体中的 @Table 上设置架构,但它不是动态的,我无法在运行时更改它。
请帮忙!问候
您可能想查看 EclipseLink 的数据分区支持,
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Partitioning
一种解决方案是设置 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 在运行时决定使用哪个数据库/模式