I have the following situation

I have tried with NH2.x and NH 3.x

Anagrafica Type and a Persona Type derived from anagrafica.


Two main table ANA_Anagrafiche and ANA_PERSONE one to one the
discriminate subcolumn is TipoAnagrafica value 'PF' with some other
collections and mappings ....

the real situation is with more joined subclasses.

If i have a collection in a joined subclass i have no success to read.

with manual hbm mapping it goes well

Mapping:


 public class AnagraficaMap :
ClassMap<Domain.Model.Anagrafica.Anagrafica>
    {
        public AnagraficaMap()
        {
            Table("ANA_Anagrafiche");
            DynamicInsert();
            DynamicUpdate();
            LazyLoad();
            Id(x => x.Id, "ID_ANAGRAFICA")
                .GeneratedBy.Guid().UnsavedValue(Guid.Empty);
            Map(x => x.Denominazione, "Denominazione");
            Map(x => x.IsAttivo, "isAttivo");
            Map(x => x.CodiceFiscale, "Codice_Fiscale");
            Map(x => x.PartitaIva, "Partita_IVA");
            DiscriminateSubClassesOnColumn("StatTipoAnagrafica");
            HasMany(prop => prop.Emails)
                .AsBag()
                .Fetch.Subselect()
                .KeyColumn("ID_ANAGRAFICA")
                .LazyLoad()
                .Inverse()
                .Cascade.AllDeleteOrphan();
            HasMany(prop => prop.Indirizzi)
                .AsBag()
                .Fetch.Select()
                .KeyColumn("ID_ANAGRAFICA")
                .LazyLoad()
                .Cascade.SaveUpdate();
            HasMany(prop => prop.Telefoni)
                .AsBag()
                .Fetch.Select()
                .KeyColumn("ID_ANAGRAFICA")
                .LazyLoad()
                .Cascade.AllDeleteOrphan();

        }
    }



 public class PersonaMap : SubclassMap<Persona>
    {
        public PersonaMap()
        {
            Table("ANA_Persone");
            LazyLoad();
            Join("ANA_Persone", j =>
                                {
                                    j.KeyColumn("ID_PERSONA");
                                    j.Map(x => x.Cognome, "COGNOME");
                                    j.Map(x => x.Nome, "NOME");
                                    j.Map(x => x.DataNascita,
"DATA_NASCITA");
                                    j.Map(x => x.Sesso, "SESSO");
                                    j.Map(x => x.LuogoNascita,
"LUOGO_NASCITA");
                                    j.References(x => x.ComuneNascita)
                                        .LazyLoad()
                                        .Nullable()
                                        .Fetch.Select()
                                        .Column("ID_COMUNENASCITA")
                                        .NotFound.Ignore();
                                    j.References(x =>
x.StatoEsteroNascita)
                                        .LazyLoad()
                                        .Nullable()
                                        .Fetch.Select()
                                        .Column("ID_STATOESTERONASCITA")
                                        .NotFound.Ignore();
                                    j.References(x => x.Cittadinanza)
                                        .LazyLoad()
                                        .Nullable()
                                        .Fetch.Select()
                                        .Column("ID_CITTADINANZA")
                                        .NotFound.Ignore();
                                    j.References(x => x.Appellativo)
                                        .Nullable()
                                        .Cascade.SaveUpdate()
                                        .Column("ID_APPELLATIVO")
                                        .LazyLoad()
                                        .Fetch.Select();
                                    j.HasMany(prop => prop.Iscrizioni)
                                       .AsBag()
                                       .Inverse()
                                       .Fetch.Select()
                                       .KeyColumn("ID_PERSONA")
                                       .LazyLoad()
                                       .Cascade.AllDeleteOrphan();

                                    j.HasMany(prop =>
prop.TitoliStudio)
                                       .AsBag()
                                       .Fetch.Select()
                                       .KeyColumn("ID_PERSONA")
                                       .LazyLoad()
                                       .Cascade.SaveUpdate();

                                });
            DynamicInsert();
            DynamicUpdate();
            DiscriminatorValue("PF");
        }
    }


the problem is that i can't obtains collections in Persona the
references goes well but hasmany have some problems , it seems that it
does not use tha HasMany in derived class, the collections in
Anagrafica worls well.

the xml mapping saved from this configuration does not track this
collections.

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="property" auto-import="true" default-cascade="none" default-
lazy="true">
- <class xmlns="urn:nhibernate-mapping-2.2" dynamic-insert="true"
dynamic-update="true" lazy="true" mutable="true"
table="ANA_Anagrafiche">
- <id name="Id" type="System.Guid, mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-
value="00000000-0000-0000-0000-000000000000">
  <column name="ID_ANAGRAFICA" />
  <generator class="guid" />
  </id>
- <discriminator type="String">
  <column name="StatTipoAnagrafica" />
  </discriminator>
- <bag cascade="all-delete-orphan" fetch="subselect" inverse="true"
lazy="true" name="Emails" mutable="true">
- <key>
  <column name="ID_ANAGRAFICA" />
  </key>
  <one-to-many class="Email" />
  </bag>
- <bag cascade="save-update" fetch="select" lazy="true"
name="Indirizzi" mutable="true">
- <key>
  <column name="ID_ANAGRAFICA" />
  </key>
  <one-to-many class="IndirizzoAnagrafico" />
  </bag>
- <bag cascade="all-delete-orphan" fetch="select" lazy="true"
name="Telefoni" mutable="true">
- <key>
  <column name="ID_ANAGRAFICA" />
  </key>
  <one-to-many class="GoPro.Domain.Model.Anagrafica.Telefono,
GoPro.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /
>
  </bag>
- <property name="Denominazione" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="Denominazione" />
  </property>
- <property name="IsAttivo" type="System.Boolean, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="isAttivo" />
  </property>
- <property name="CodiceFiscale" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="Codice_Fiscale" />
  </property>
- <property name="PartitaIva" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="Partita_IVA" />
  </property>
+ <subclass name="Persona" lazy="true" dynamic-update="true" dynamic-
insert="true" discriminator-value="PF">
- <join table="ANA_Persone">
- <key>
  <column name="ID_PERSONA" />
  </key>
- <property name="Cognome" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="COGNOME" />
  </property>
- <property name="Nome" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="NOME" />
  </property>
- <property name="DataNascita"
type="System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="DATA_NASCITA" />
  </property>
- <property name="Sesso" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="SESSO" />
  </property>
- <property name="LuogoNascita" type="System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <column name="LUOGO_NASCITA" />
  </property>
- <many-to-one class="LocalitaGeografica" fetch="select" lazy="proxy"
name="ComuneNascita" not-found="ignore">
  <column name="ID_COMUNENASCITA" not-null="false" />
  </many-to-one>
- <many-to-one class="LocalitaGeograficaNazione" fetch="select"
lazy="proxy" name="StatoEsteroNascita" not-found="ignore">
  <column name="ID_STATOESTERONASCITA" not-null="false" />
  </many-to-one>
- <many-to-one class="LocalitaGeograficaNazione" fetch="select"
lazy="proxy" name="Cittadinanza" not-found="ignore">
  <column name="ID_CITTADINANZA" not-null="false" />
  </many-to-one>
- <many-to-one cascade="save-update" class="Appellativo"
fetch="select" lazy="proxy" name="Appellativo">
  <column name="ID_APPELLATIVO" not-null="false" />
  </many-to-one>
  </join>
  </subclass>
  </class>
  </hibernate-mapping>

-- 
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en.

Reply via email to