Es necesario mapear la clase base y después los mapping para las sub clases
o extensiones esto también se pueden usando <union-subclass> pero esta
te crearía una tabla por clase excepto la común

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="pruebas.nh.modelo"
namespace="pruebas.nh.modelo">
<class name="Party">
<id name="Id">
<generator class="guid.comb" />
</id>
<discriminator column="PartyType" />
<property name="Location" />
<property name="Hour" not-null="true" />
</class>
</hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="pruebas.nh.modelo"
namespace="pruebas.nh.modelo">
<subclass name="Company" extends="Party">
<property name="CompanyName"/>
</subclass>
</hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="pruebas.nh.modelo"
namespace="pruebas.nh.modelo">
<subclass name="Person" extends="Party">
<property name="FirstName"/>
<property name="LastName"/>
</subclass>
</hibernate-mapping>


Sobre el query no debería haber ningún problema seria cosa que pruebes y
comentes



El 2 de junio de 2011 16:52, Carlos Peix <[email protected]> escribió:

> Sigo con este tema y tengo una duda con eager-loading. El modelo es el que
> mostre en el post anterior: Order tiene una referencia a Customer y Customer
> tiene una referencia a Party.
>
> Mappings:
>
> <class name="Order" table="Orders">
> ...
> <many-to-one name="Customer" class="Customer" column="CustomerId"/>
> </class>
>
> <class name="Customer" table="Customers">
> ...
> <many-to-one name="Party" cascade="save-update"
>  unique="true" column="PartyId"/>
> </class>
>
> <import class="Party" />
>  <class name="Person" table="People">
> ...
>  <property name="FirstName"/>
> <property name="LastName"/>
> </class>
>
> <class name="Company" table="Companies">
> ...
> <property name="CompanyName"/>
> </class>
>
> Con esto tengo dos temas, primero que me da un error de compilacion del
> mapping: "An association from the table Customers refers to an unmapped
> class: pruebas.nh.modelo.Party", a pesar del import. Que estoy haciendo mal?
>
> Luego me gustaria poder hacer este query (HQL)
>
> "from Order o join fetch o.Customer c join fetch c.Party p"
>
> Puedo hacer eso?
>
> Gracias!
>
> ----------------------------------
> Carlos Peix
>
> 2011/6/1 Carlos Peix <[email protected]>
>
>> Hola gente,
>>
>> Quiero consultarles algo ya que estoy tratando de encontrar una forma de
>> mapeo mas o menos estandar para un problema mas o menos estandar en mis
>> modelos. La consulta no solo se relaciona con el mapeo en NH, tambien me
>> interesa determinar la estructura de BD mas adecuada.
>>
>> Basicamente es la relacion evento-rol-actor, para que quede mas claro,
>> permitanme conpartir algunas clases:
>>
>> // evento
>> public class Order {
>>     Guid _id;
>>     Customer _customer;
>> }
>>
>> // el rol
>> public class Customer {
>>     Guid _id;
>>     Party _actor;    // (1) u Object _actor
>> }
>>
>> // actores (ver Fowler para teoria sobre Party/Company/Person y
>> accountability)
>> public class Company : Party {
>>     Guid _id;
>>     string _companyName;
>> }
>>
>> public class Person : Party {
>>     Guid _id;
>>     string _firstName;
>>     string _lastName;
>> }
>>
>> (1) aqui puedo tener definida alguna clase base para los actores que
>> pueden adoptar el rol de customer (como seria el caso de Party) y otras
>> veces no, para lo cual tendre que usar Object. Entiendo que esto me lleva a
>> dos respuestas distintas a mi consulta.
>>
>> La pregunta es como me conviene mapear la propiedad _actor de Customer, ya
>> se en el caso en que esta deba ser de tipo Object o Party.
>>
>> He probado con any y con many-to-one. Este objeto Customer podria o no
>> utilizar el mismo valor para el Id que el actor. Opino que lo mejor seria
>> que no lo hagan. Por ahi con Guids no hay problema pero en otros casos me
>> restringe.
>>
>> Un punto adicional seria que, probablemente, necesite en la entidad
>> Company o Person una coleccion de todos los roles desempeñados, seria como
>> la relacion opuesta y, en este caso, definitivamente no los roles no van a
>> compartir ninguna clase base salvo, eventualmente, una interfaz "IRol".
>>
>> ----------------------------------
>> Carlos Peix
>>
>>
>  --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a