2009-05-06 64 views
1

我試圖解決很容易的問題。我想建立連接到2個完全不同的數據庫(但都是mysql)。現在我試圖通過創建多個配置文件然後創建多個會話來解決這個問題。一切工作,直到我達成關係。NHibernate和多個數據庫

我有2個數據庫表2:

DB1 - 新聞

DB2 - News_Authors

我添加新聞到DB1配置和News_Authors到DB2配置。當我嘗試建立簡單的一到一個關係錯誤,我得到:

An association from the table songs refers to an unmapped class: db1.News_Authors 

News.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="project.News, project" table="news" lazy="false"> 
    <id name="id" column="id" type="integer" length="11"> 
     <generator class="native" /> 
    </id> 
    <property name="title" type="String" length="255" /> 
    <property name="authorid" type="integer" length="5" /> 

    <one-to-one name="NewsAuthor" cascade="all-delete-orphan" lazy="proxy" column="authorid" unique="true" /> 
    </class>  
</hibernate-mapping> 

News_Authors.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="project.News_Authors, project" table="news_authors" lazy="false"> 
    <id name="id" column="id" type="integer" length="11"> 
     <generator class="native" /> 
    </id> 
    <property name="name" type="String" length="255" /> 
    </class>  
</hibernate-mapping> 

config 我添加了這個來啓用映射。現在,如果我同時設置在一個配置文件,一切正常......

<mapping resource="project.News.hbm.xml" assembly="project" /> 

所以怎麼也我會的創建過程中「通知」 NHibernate的,我有多個會話?或者我應該選擇完全另一種方法?

+1

我認爲是一個的很多答案錯過的細微差別。您是否說這些表格位於兩個不同的數據庫中,並且您想要跨數據庫加入數據? – 2009-05-08 20:35:43

回答

4

另一個可能的解決方案是在其中一個sql server數據庫中創建視圖來引用另一個表中的表。查看地圖就像表,它很容易做到這一點返回像一個觀點:

SELECT * FROM db2.News_Authors

在DB1數據庫。

這樣你只需要一個映射到兩個數據庫之一的.hbm.xml文件。

希望這有助於

- 最大

0

你在追求的不是多個會話,而是多個會話工廠。有關更多詳細信息,請參閱this

這裏的關鍵是你不必通過配置文件來初始化你的會話工廠 - 你可以通過編程來實現。這只是擁有兩個會話工廠的一個步驟。

相關問題