2010-10-25 89 views
4

我需要爲不同的客戶提供多個數據庫。我如何使用Hibernate處理多個數據庫?有沒有什麼好的例子如何做到這一點?使用多個數據庫休眠

我可以創建配置對象,然後構建SessionFactory,但這會始終創建一個新的會話工廠,這不會是非常明智的。

編輯:

現在,我可以得到Hibernate的配置對象用戶登錄的時候,但我怎樣才能創建/獲取與該對象的會話工廠,以便將只有因爲如果一個數據庫(當然一個會話工廠多個數據庫同時使用,那麼可以有多個會話工廠)?

回答

2

我需要爲不同的客戶提供多個數據庫。我如何使用Hibernate處理多個數據庫?有沒有什麼好的例子如何做到這一點?

確實會創建多個SessionFactory(每個數據庫一個)。

現在,我可以得到Hibernate的配置對象,當用戶登錄,但我怎樣才能創建/獲取與該對象的會話工廠,這樣如果使用多個數據庫將只有一個一個數據庫(當然會話工廠同時,那麼可以有多個會話工廠)?

使用一些獨特的Map<SomeKey, SessionFactory>。如果SessionFactory尚未創建,請構建它並將其存儲在地圖中。

+1

Thanx爲這個答案,但因爲所有數據庫是相同的,我設法只使用一個SessionFactory。現在我創建Connection對象並使用方法sessionFactory.openSession(connection);獲得休眠會話。現在我可以動態連接到任何我想要的數據庫。 – newbie 2010-10-25 13:13:22

+0

@newbie:我不是故意粗魯,但在提問時應該嘗試給出相關細節,讀者不介意讀者。 – 2010-10-25 13:25:14

+0

對不起,我下次嘗試更具體一點 – newbie 2010-10-25 14:10:34

2

休眠SessionFactory一次只能處理一個DataSource,一般而言,每個DataSource指的是一個且只有一個數據庫。所以如果你需要多個數據庫,那麼最簡單的解決方案几乎肯定是多個SessionFactory實例。

我不知道爲什麼你認爲這不會是明智的,但是,這似乎對我來說足夠公平。

某些RDBMS允許有限的跨數據庫引用,這可能允許您使用Hibernate和一個DataSource做某些事情,但是您沒有告訴我們有關您的數據庫設置的任何信息。

+0

我不知道如何創建動態的新會話工廠並將它們映射到srping框架,所以我可以在我的DAO中使用hibernate會話。 – newbie 2010-10-25 07:40:16

+0

@newbie:你沒有談及動態創建它們。這確實是一個壞主意。休眠不是這項工作的工具。 – skaffman 2010-10-25 07:50:29

+0

爲什麼?客戶的一個會話工廠,在用戶登錄時動態創建。我看不出有什麼問題,但我只是不知道什麼是實現它的最好方法 – newbie 2010-10-25 08:47:14

4

我有同樣的問題。我這樣解決:

首先,不同的數據庫應該有不同的cfg.xml文件。然後,只要您想連接到第二個數據庫,只需使用Hibernate的Configuration對象。

Configuration config = new Configuration().configure("<complete path to your cfg.xml file>"); 
SessionFactory sessionFactory = config.buildSessionFactory(); 
Session session = sessionFactory.getCurrentSession(); 
session.beginTransaction(); 

我發現這個在這裏:http://www.coderanch.com/t/468821/ORM/java/If-hibernate-cfg-xml-has

我敢肯定,這可以擴展到2級以上的數據庫。 希望這有助於。