2013-07-13 42 views
2

如何在運行時設置模式? 我想在多個數據庫中運行一個名稱查詢並彙總他們的答案。JPA動態運行多個數據庫模式

例如運行此查詢在DB1和DB2: 選擇客戶從客戶CUS WHERE CUS.CODE = 1

注:我可以在實體上@Table集的模式,但它不是動態的,我無法在運行時更改它。

請幫忙! 問候

回答

1

一種解決方案是設置Ñ數據源的每個指向不同數據庫/模式:

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

和N實體管理器工廠(EMF)以1對1映射與每個DS:

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使用