Chiarimento su relazioni bidirezionali

48 views
Skip to first unread message

Martino Nucci

unread,
Dec 31, 2012, 8:35:41 AM12/31/12
to nh...@googlegroups.com
Buongiorno a tutti
ho da poco iniziato ad utilizzare nhibernate e vorrei capire come funziona Hibernate con le relazini bidirezionali.
Ho i seguenti file di mapping(classe Anagraphic in relazione uno a molti con Anagraphicspecialty)

<hibernate-mapping assembly="WpfTest" namespace="WpfTest.Domain" xmlns="urn:nhibernate-mapping-2.2"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="nhibernate-mapping.xsd">
  <class name="Anagraphic" table="ANAGRAPHIC" lazy="true" >

    <id name="CodeExternal" >
      <column name="CODE_EXTERNAL" sql-type="int" not-null="true" />
      <generator class="identity" />
    </id> <bag name="AnagraphicSpecialties" inverse="true" cascade="all">
      <key column="Anagraphic_Code_External" />
      <one-to-many class="AnagraphicSpecialty"  />
    </bag>
  </class>
</hibernate-mapping>

<hibernate-mapping assembly="WpfTest" namespace="WpfTest.Domain" xmlns="urn:nhibernate-mapping-2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="nhibernate-mapping.xsd">

  <class name="AnagraphicSpecialty" table="TANAGRAPHIC_SPECIALTIES" lazy="true" >
    <id name="IdAnagraphicSpecialty" column="ID_Anagraphic_Specialty">
      <column name="ID_Anagraphic_Specialty" sql-type="int" not-null="true" />
      <generator class="identity" />
    </id>
    <property name="IdSpecialty">
      <column name="ID_Specialty" sql-type="int" not-null="true" />
    </property>
    <property name="AnagraphicCodeExternal"  update="false"  insert="false">
      <column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
    </property>   
    <many-to-one name="Anagraphic" class="Anagraphic" cascade="save-update">
      <column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
    </many-to-one>
  </class>
</hibernate-mapping>

In c# facendo una cosa del genere, non dovrebbe assegnare automaticamente il campo AnagraphicCodeExternal all'oggetto AnagraphicSpecialties ?

MyAnagraphic.AnagraphicSpecialties.Add(new AnagraphicSpecialties(){IdSpecialty=5});
session.Flush();
session.SaveOrUpdate(MyAnagraphic);

o devo obbligatoriamente assegnare l'oggetto della relazione in questo modo?

MyAnagraphic.AnagraphicSpecialties.Add(new AnagraphicSpecialties(){IdSpecialty=5,Anagraphic=MyAnagraphic});
session.Flush();
session.SaveOrUpdate(MyAnagraphic);

Inoltre non esiste un modo per  salvare un oggetto  specificando il valore della chiave esterna o specificando direttamente l'oggetto evitando l'eccezione Error dehydrating property value  ?

   <property name="AnagraphicCodeExternal">
      <column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
    </property>   
    <many-to-one name="Anagraphic" class="Anagraphic" cascade="save-update">
      <column name="Anagraphic_Code_External" sql-type="int" not-null="true" />
    </many-to-one>

Grazie

Matteo Migliore

unread,
Feb 6, 2013, 4:44:58 PM2/6/13
to nh...@googlegroups.com
Ciao,

se vuoi ho appena scritto un esempio per verificare alcuni punti e fare test di casi
particolari.

Lo trovi in allegato.

Matteo Migliore
Nhibernate.Test.zip
Reply all
Reply to author
Forward
0 new messages