1

I'm trying to solve pretty easy problem. I want to establish connection to 2 totally different databases ( but both mysql ). Now I tried to solve this by creating multiple config files and then creating multiple sessions. Everything works until I reached relations.

I have 2 tables in 2 databases:

db1 - News

db2 - News_Authors

I added News to db1 config and News_Authors to db2 config. When I try to build simple one-to-one relation error, I receive:

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 I added this to enable mappings. Now If I set both in one config files, everything works...

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

So how could I during creating of session also "notify" nhibernate that I have multiple sessions? Or should I pick totally another approach?

2
  • 1
    I think there's a nuance that's missed by the answers. Are you saying that the tables are in two different databases, and you want to join the data across databases? Commented May 8, 2009 at 20:35
  • I believe that's exactly what the asker is asking. Perhaps this is a job for NHibernate Shards? I've never used it before and don't know if Shards supports this type of scenario. Commented May 24, 2011 at 16:16

2 Answers 2

4

One other possible solution would be to create views in one of the sql server databases to reference the tables in the other. Views map just like tables and its easy to do a view that returns something like:

select * from db2.News_Authors

in the db1 database.

this way you would only need a single .hbm.xml file that maps to one of the two databases.

Hope this helps,

-Max

Sign up to request clarification or add additional context in comments.

Comments

0

What you are after is not multiple sessions but multiple session factories. See this for more details.

The key here is that you don't have to initialize your session factory through config file - you can do it programatically. And it's just a step to have two session factories.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.