>From NH's mapping point of view, it doesn't matter that IberianLynx
extends EndangeredAnimal,
as it's seen as an Animal subclass.
Also, you can have many <join>s, so NH wouldn't know where to put it.
You can probably specify the same join in IberianLynx, although schema
generation might fail.

    Diego


On Fri, Aug 20, 2010 at 15:23, v64 <[email protected]> wrote:

> I'm trying to map a deep class hierarchy and having trouble getting
> the desired mapping. Here's an example:
>
> Classes:
>
> namespace Animals
> {
>    public class Animal
>    {
>        public string SpeciesName { get; set; }
>    }
>
>    public class DomesticAnimal : Animal
>    {
>        public string Name { get; set; }
>    }
>
>    public class WildAnimal : Animal
>    {
>        public string Habitat { get; set; }
>        public bool IsPredator { get; set; }
>    }
>
>    public class EndangeredAnimal : WildAnimal
>    {
>        public string RedListID { get; set; }
>        public int Population { get; set; }
>        public string Status { get; set; }
>    }
>
>    public class IberianLinx : EndangeredAnimal
>    {
>        public int WhiskerLength { get; set; }
>        public int StripeCount { get; set; }
>    }
> }
>
> Mapping:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> assembly="Animals">
>
>  <class name="Animals.Animal" abstract="true" table="Animal">
>    <id type="int" unsaved-value="0">
>      <generator class="native"/>
>    </id>
>    <discriminator column ="AnimalType" type="string" length="64"/>
>    <property name="SpeciesName"/>
>
>    <subclass name="Animals.DomesticAnimal" discriminator-
> value="DomesticAnimal">
>      <property name="Name"/>
>    </subclass>
>
>    <subclass name="Animals.WildAnimal" discriminator-
> value="WildAnimal">
>      <property name="Habitat"/>
>      <property name="IsPredator"/>
>    </subclass>
>
>    <subclass name="Animals.EndangeredAnimal" discriminator-
> value="EndangeredAnimal">
>      <join table="EndangeredAnimal">
>        <key column="AnimalID"/>
>        <property name="RedListID"/>
>        <property name="Population"/>
>        <property name="Status"/>
>      </join>
>
>      <subclass name="Animals.IberianLinx" discriminator-
> value="IberianLinx">
>        <property name="WhiskerLength"/>
>        <property name="StripeCount"/>
>      </subclass>
>    </subclass>
>  </class>
>
> </hibernate-mapping>
>
> When I generate the schema I get these:
>
> create table Animal
> (
>        id INT IDENTITY NOT NULL,
>        AnimalType NVARCHAR(64) not null,
>
>        SpeciesName NVARCHAR(255) null,
>        Name NVARCHAR(255) null,
>        Habitat NVARCHAR(255) null,
>        IsPredator BIT null,
>        WhiskerLength INT null,
>        StripeCount INT null,
>
>        primary key (id)
> )
>
> create table EndangeredAnimal (
>        AnimalID INT not null,
>
>        RedListID NVARCHAR(255) null,
>        Population INT null,
>        Status NVARCHAR(255) null,
>
>        primary key (AnimalID)
> )
>
> My problem is that I don't want IberianLynx's properties to be in
> Animal, I need them to be in its immediate ancestor's table, i.e.
> EndangeredAnimal. Why did they end up in Animal?
>
> TIA
> v64
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en.

Reply via email to