2009-05-06 3 views
1

나는 아주 쉬운 문제를 해결하려고 노력하고있다. 두 개의 완전히 다른 데이터베이스 (하지만 두 mysql 모두)에 대한 연결을 설정하려고합니다. 이제 여러 설정 파일을 만든 다음 여러 세션을 만들어이 문제를 해결하려고했습니다. 내가 관계에 도달 할 때까지 모든 것이 효과가 있습니다. - 뉴스NHibernate와 다중 데이터베이스

DB2 - News_Authors

내가 DB1의 설정 및 DB2의 설정에 News_Authors에 뉴스를 추가

DB1 :

나는이 데이터베이스에서 2 개 테이블을 가지고있다. 나는 간단한 일대일 관계의 오류를 구축 할 때, 나는 나타납니다

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> 

구성 맵핑을 사용하려면이를 추가했습니다. 지금은 모두

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

이 어떻게 또한 내가 여러 세션을 갖고 자 NHibernate를 "통지"세션의 생성 동안 나는 수 ... 모든 작품, 하나의 설정 파일에 설정 한 경우? 아니면 전적으로 다른 접근법을 선택해야합니까?

+1

내가 답변 놓친 것 뉘앙스가 있다고 생각. 테이블이 두 개의 서로 다른 데이터베이스에 있다고 말하면서 데이터베이스간에 데이터를 조인하고 싶습니까? –

+0

나는 그것이 정확히 묻는 사람이 묻는 것이라고 생각한다. 아마도 이것은 NHibernate Shards에 대한 작업입니까? 샤드 (Shards)가 이런 유형의 시나리오를 지원하는지는 이전에는 전혀 사용하지 못했습니다. –

답변

4

SQL Server 데이터베이스 중 하나에서 뷰를 생성하여 다른 테이블의 테이블을 참조 할 수 있습니다. DB1 데이터베이스에 db2.News_Authors

에서 선택

*

: 뷰는 뭔가를 반환하는 뷰를 할 단지 테이블과 쉬운처럼 매핑합니다.

이렇게하면 두 데이터베이스 중 하나에 매핑되는 단일 .hbm.xml 파일 만 필요합니다. 이 도움이

희망,

- 최대

0

이후의 내용은 다중 세션이 아니며 여러 세션 팩토리입니다. 자세한 내용은 this을 참조하십시오.

여기에서 핵심은 구성 파일을 통해 세션 팩토리를 초기화 할 필요가 없다는 것입니다. 프로그램 적으로 할 수 있습니다. 그리고 이것은 두 개의 세션 팩토리를 가지고있는 단계 일뿐입니다.