Cual es la ventaja de meter todo en una misma bolsa de gatos ? (me refiero a
todas las relaciones en una misma tabla).

No se a que sirve  ElementosRelacionados, así como está y menos ya que
es IList<Elemento>,
tampoco entiendo que todas las entidades necesiten un control de
optimistic-lock... repito... Para mi te estas complicando mucho la vida
professional...

a parte eso, viendo el eschema de clases, no veo ninguna razón por la cual
usar table-per-concrete-class; para NH no deberían existir ni el mapping de
Elemento y menos el napping de Entidad.

2010/12/14 tolemaC <[email protected]>

> Me gustaría explicar el trasfondo de por que me surgen estas cosas y
> otras muchas que voy solucionando poco a poco, si no lo he hecho ya es
> por no dar la tabarra y por que llevo muy poco tiempo usando un ORM y
> me falta mucho por aprender. Muchas de las cosas que me han surgido
> las he solucionado tan solo replanteándolas desde la raíz, pensando en
> objetos y no en tablas, pero bueno, voy poco a poco.
>
> A ver si aclaro mis ideas y saco un poco de tiempo y os cuento.
>
> Volviendo al tema: many-to-any es más o menos lo que buscaba, he
> encontrado este ejemplo:
>
>    <set name="animals" table="robot_animals">
>      <key column="robot_id"/>
>      <many-to-any id-type="long">
>        <column name="animal_class" not-null="true"/>
>        <column name="animal_id" not-null="true"/>
>      </many-to-any>
>    </set>
>
> Lo que no se es como NHibernate sabe de que columna coger la clase y
> de cual el id, supongo que será por el orden de las columnas en el
> XML.
> De lo poco que he encontrado en la referencia de NHibernate es:
>
> "The <many-to-any> and <index-many-to-any> elements provide for true
> heterogeneous associations. These mapping elements work in the same
> way as the <any> element - and should also be used rarely, if ever."
>
> Supongo que al ser un caso extraño no se ha documentado mucho.
>
> Continuando; con many-to-any podría solucionar el problema creando una
> tabla de relaciones por cada elemento, de forma que por las clases
> Tarea, Documento, Persona, ... debería crear las tablas
> TareaRelaciones, DocumentoRelaciones, PersonaRelaciones, ... pero aquí
> surge una pega. Si a la "Tarea 4" le asocio el "Documento 3", guardará
> la relación en la tabla TareaRelaciones. Cuando carge la tarea 4
> tendré el documento 3 como elemento relacionado, el problema es que
> cuando cargue el "documento 3" irá a cargar las relaciones en la tabla
> DocumentoRelaciones y no encontrará la relación con la "tarea 4".
>
> Es por esto que mi idea inicial era tener todas las relaciones en una
> misma tabla.
> Tendría que buscar la forma de decirle al many-to-any como montar el
> where para buscar las relaciones y como extraer la entidad
> relacionada.
>
> Algo así:
>
>    <set name="ElementosRelacionados" table="Relaciones">
>      <many-to-any-TwoWay-EXTREME>
>        <class-key-columns column1="ClaseElemento1"
> column2="ClaseElemento2"/>
>        <id-key-columns column1="IdElemento1" column2="IdElemento2"/>
>      </many-to-any-TwoWay-EXTREME>
>    </set>
>
> Quizás suene a risa :?, pero con algo así se podrían relacionar todo
> tipo de entidades dentro de un dominio.
> Quizás me esté complicando la vida profesional :?, pero esto me ahorra
> editar muchos mappings y da una versatilidad extraordinaria en un
> dominio cualquiera.
>
> Saludos,
>
> On 14 dic, 11:18, Fabio Maulo <[email protected]> wrote:
> > Para mi te estas complicando mucho la vida professional... de todas
> formas
> > estas buscando: many-to-any
> >
> > 2010/12/13 tolemaC <[email protected]>
> >
> >
> >
> >
> >
> > > Hola gente,
> >
> > > Me ha surgido algún que otro problema a la hora de mapear las
> > > entidades de un dominio, no se por donde cogerlo y necesito ideas.
> >
> > > En mi dominio manejo dos tipos de entidades, las que llamo Entidades
> > > por que tienen un Id y una versión y otras entidades de más peso que
> > > heredan de entidad pero también tienen nombre, descripción y un flag
> > > de activación/desactivación. A estas últimas las he llamado
> > > "Elementos", en código son esto:
> >
> > >    public class Entidad
> > >    {
> > >        public virtual int Id { get; set; }
> > >        public virtual int Version { get; set; }
> > >    }
> >
> > >    public class Elemento : Entidad
> > >    {
> > >        public virtual string Nombre { get; set; }
> > >        public virtual string Descripcion { get; set; }
> > >        public virtual bool Desactivado { get; set; }
> > >        public virtual IList<Elemento> ElementosRelacionados { get;
> > > set; }
> > >    }
> >
> > > La clase Elemento también tiene una lista de otros elementos que
> > > están, por algún motivo, relacionados en él mismo.
> >
> > > Bien, todas las entidades de mi dominio heredan de entidad o elemento,
> > > como ejemplo tengo entidades llamadas, Persona, Tarea, Documento y
> > > Ejecutor, este es el diagrama de clases que forman:
> >
> > >http://jros.org/files/orm/elementos.png
> >
> > > Como podéis ver Persona, Ejecutor, Tarea y Documento heredan directa o
> > > indirectamente de Elemento.
> > > Para el caso quiero usar table-per-concrete-class para mapear mis
> > > entidades, y el problema me viene en que no se como mapear la
> > > propiedad "ElementosRelacionados" para cada una de las clases
> > > concretas.
> >
> > > Pensándolo un poco mi idea es usar una tabla llamada "Relaciones"
> > > donde relacionar las entidades, teniendo como campos "ClaseElemento1",
> > > "ClaseElemento2", "IdElemento1" y "IdElemento2". En los dos primeros
> > > pondría el nombre de la clase del elemento y en los segundos los
> > > Identificadores.
> >
> > > Todo esto debería funcionar teniendo en cuenta:
> >
> > > 1) Cualquier elemento se puede relacionar con cualquier otro. Hoy son
> > > Documento, Tarea, Persona y Ejecutor, pero mañana pueden aparecer
> > > Expediente, Proyecto, Factura, ... Me gustaría hacerlo de forma
> > > genérica para que me valga para cualquier tipo de entidad.
> >
> > > 2) Un Documento puede estar relacionado con una Tarea y viceversa.
> > > Cuando voy a buscar los Elementos relacionados con una Tarea, debo
> > > mirar en la tabla de relaciones si se encuentra como Elemento1 o como
> > > Elemento2, a ambos lados de la relación.
> >
> > > En fin, me ha parecido lo suficientemente interesante como para
> > > plantearlo aquí.
> >
> > > Aquí van las tablas como más o menos las tengo pensadas:
> > >http://jros.org/files/orm/tablas1.png
> >
> > > Alguna idea?
> >
> > > --
> > > Para escribir al Grupo, hágalo a esta dirección:
> > > [email protected]
> > > Para más, visite:http://groups.google.com/group/NHibernate-Hispano
> >
> > --
> > Fabio Maulo
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>



-- 
Fabio Maulo

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