Hola,

No conozco la implementacion exacta de decorator para este caso, pero se me
ocurre mas compleja, como dice Diego, ademas, la idea de Roles me suena mas
natural. En mi opinon, la opcion de una jerarquia de clases para resolver tu
problema es la mas incomoda.

Aquí encuentro dos threads sobre roles, finate que al final del primero cito
un PDF de Fowler que te presenta un monton de opciones para resolverlo, cada
uno con pros y contras

http://groups.google.com.ar/group/NHibernate-Hispano/browse_thread/thread/9f
10ee6d4b73319a/8bda801296f53ee6?lnk=gst&q=dealing+with+roles#8bda801296f53ee
6

http://groups.google.com.ar/group/NHibernate-Hispano/browse_thread/thread/88
2b4d6bfeb331f4/b5f7ceb5df9943d5?lnk=gst&q=dealing+with+roles#b5f7ceb5df9943d
5

Otra buena referencia sobre el tema es Streamlined Object Modeling, de
Nicola y otros. Si necesitas algun detalle de implementacion avisame.

Carlos Peix

-----Mensaje original-----
De: [email protected]
[mailto:[EMAIL PROTECTED] En nombre de Detonador de
Sueños
Enviado el: Sábado, 28 de Junio de 2008 04:01 p.m.
Para: NHibernate-Hispano
Asunto: [NHibernate-Hispano] Mapeo de Decorator


Buenas tardes a todos.
Les planteo mi problema: Actualmente tengo una clase Persona abstracta y
luego otras clases Médico, Paciente, Clinica que heredan de Persona.
Hasta ahí todo me funciona correctamente, pero me encotré con el problema de
que un Paciente, puede ser un Médico y/o una Clínica y así todas las
combinaciones posibles.
Estuve leyendo por ahí que esto no se puede hacer con herencia y algunos
proponían hacerlo con Decorator.
Pero la verdad es que no se como arrancar.
Les dejo mi mapeo actual (no está clínica, pero tiene otras propiedades
distintas a Médicos y Pacientes), espero que me puedan ayudar para pasarlo a
Decorator o me den alguna sugerencia.

Desde ya muchas gracias
Maza, Leonardo Javier

El mapeo actual

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="SMSystem.MedLab.Models" namespace="SMSystem.MedLab.Models">
  <class name="Persona" table="Personas" abstract="true" >
    <id name="Id" type="int">
      <generator class="identity"/>
    </id>

    <property name="TipoDocumento" type="int" not-null="false"/>
    <property name="NumeroDocumento" type="int" not-null="false"/>
    <property name="ApellidoNombre" type="String" length="35" not-
null="true"/>
    <many-to-one name="Direccion" class="Direccion" foreign-
key="FK_Personas_Direcciones" fetch="join" not-null="false"/>

    <set name="Telefonos" table="PersonasTelefonos" lazy="false">
      <key column="Persona" foreign-key="FK_PersonasTelefonos_Persona"/
>
      <one-to-many class="Telefono" not-found="ignore"/>
    </set>

    <set name="Emails" table="PersonasEmails" inverse="true"
lazy="false">
      <key column="Persona" foreign-key="PersonasEmails_Persona"/>
      <one-to-many class="Email" not-found="ignore"/>
    </set>

    <!--Mapeo de médicos-->
    <joined-subclass name="Medico" table="Medicos" extends="Persona">
      <key column="Persona" foreign-key="FK_Medicos_Personas"/>

      <property name="Codigo" unique="true" not-null="true"/>
      <property name="FechaInicio" type ="DateTime" not-null="true"/>
      <property name="FechaFin" type ="DateTime" not-null="false"/>

      <set name="Zonas" table="MedicosZonas" lazy="false"
fetch="join">
        <key column="Medico" foreign-key="FK_MedicosZonas_Medico"/>
        <many-to-many class="Zona" column="Zona" fetch="join" foreign-
key="FK_MedicosZonas_Zona"/>
      </set>
    </joined-subclass>

    <!--Mapeo de Pacientes-->
    <joined-subclass name="Paciente" table="Pacientes"
extends="Persona">
      <key column="Persona" foreign-key="FK_Pacientes_Personas"/>

      <property name="Codigo" unique="true" not-null="true"/>
    </joined-subclass>

  </class>
</hibernate-mapping>


--~--~---------~--~----~------------~-------~--~----~
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