Hi.
I have the same problem, when I use the join in subclass the
NHibernate not brings me the list of object.
my solution was put out join.
In your case:
public PersonaMap()
{
Table("ANA_Persone");
LazyLoad();
Join("ANA_Persone", j =>
{
j.KeyColumn("ID_PERSONA");
...............
}
HasMany(x=> x.Iscrizioni)
.AsBag()
.Inverse()
.Fetch.Select()
.KeyColumn("ID_PERSONA")
.LazyLoad()
.Cascade.AllDeleteOrphan();
HasMany(x=> x.TitoliStudio)
.AsBag()
.Fetch.Select()
.KeyColumn("ID_PERSONA")
.LazyLoad()
.Cascade.SaveUpdate();
......
}
i'm testing now.. because i don't know if is a correct form...
thanks,
Eduardo Santos
On Dec 20 2010, 11:47 pm, Del Brocco Andrea <[email protected]>
wrote:
> 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.