2009-05-06 50 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

这里的关键是你不必通过配置文件来初始化你的会话工厂 - 你可以通过编程来实现。这只是拥有两个会话工厂的一个步骤。