NHibernate Mappings: Assoziation zweier bzw. dreier Tabellen

5ersch

Grünschnabel
Hallo zusammen,

ich habe nicht allzu viel zu dem Thema NHibernate in diesem Forum gefunden, das meine Probleme lösen könnte. Deshalb mein Post :).

Zum ersten Problem:
Ich möchte die Struktur, die hier
rel1.png
dargestellt ist, gemappt haben. Hierbei sind die Datentypen nicht wichtig. Mir geht es nur darum, eine Verbindung zwischen diesen Tabellen herzustellen. Meine erste Überlegung dazu:

Tabelle messenger
Code:
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DBCreator" namespace="DBCreator.emDB">
  <class name="Messenger" table="messenger">
    
    <!-- Id -->
    <id name="Id" column="MessengerType" type="System.String"><generator class="assigned"/></id>

    <!-- Associations -->
    <set name="FKcontactaddressmessenger" inverse="true">
      <key column="MessengerType"/>
      <one-to-many class="Contactaddress"/>
    </set>

  </class>
</hibernate-mapping>

Tabelle contactaddress
Code:
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DBCreator" namespace="DBCreator.emDB">
  <class name="Contactaddress" table="contactaddress">

    <!-- Id -->
    <composite-id name="Id" class="DBCreator.emDB.Components.PairIdComponent">
	    <key-property name="Key1" column="MessengerType" type="System.String"/>
	    <key-property name="Key2" column="ProfileId" type="System.Int32"/>
    </composite-id>

    <!-- Attributes -->
    <property name="ContactInformation" column="ContactInformation" not-null="true" type="System.String"  length="255" insert="true" update="true"/>

    <!-- Associations  -->
    <many-to-one name="MessengerType" column="MessengerType" not-null="true" update="false"/>
    <many-to-one name="Profile" column="ProfileId" update="false"/>

  </class>
</hibernate-mapping>

Tabelle profile
Code:
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  assembly="DBCreator" namespace="DBCreator.emDB">
  <class name="Profile" table="profile">

    <!-- Id -->
    <id name="Id" column="ProfileId" type="System.Int32" unsaved-value="null"><generator class="assigned"/></id>

    <!-- Attributes -->
    <property name="StatusMessenger" column="StatusMessenger" not-null="false" type="System.String"  length="255" insert="true" update="true"/>
    <property name="UserId" column="UserId" not-null="true" type="System.Int32"  insert="true" update="true"/>

    <!-- Associations -->
    <set name="FKcontactadressprofile" inverse="false">
      <key column="ProfileId"/>
      <one-to-many class="Messenger" column="MessengerType"/>
    </set>

  </class>
</hibernate-mapping>

Eine simple (keine weiteren Attribute in der mittleren Tabelle) m:n-Assoziation bekomme ich mit many-to-many zum laufen. Hierbei wir die mittlere Tabelle erzeugt, ohne dafür eine hbm.xml-Datei schreiben zu müssen. Oben allerdings ist in der Tabelle contactadress ein zusätzliches Attribut, dass mir Probleme bereitet.

Jemand ne Idee, die man das Problem lösen könnte?





Mein zweites Problem stellt diese
rel2.png
Struktur dar. Hierbei habe ich allerdings kaum einen Ansatz.

Tabelle contactlist
Code:
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DBCreator" namespace="DBCreator.emDB">
  <class name="Contactlist" table="contactlist">

    <!-- Composite Id -->
    <composite-id name="Id" class="DBCreator.emDB.Components.PairIdComponent">
	    <key-property name="Key1" column="OwnerProfileId" type="System.Int32"/>
	    <key-property name="Key2" column="TargetProfileId" type="System.Int32"/>
    </composite-id>
    
  </class>
</hibernate-mapping>

Tabelle profile siehe oben.

Ich freue mich über jede Antwort :).
 
Zurück