Absolutamente. Esta explicado en el manual y en los últimos 3 libros de nhibernate
El 19/10/11, Walter Poch <[email protected]> escribió: > Igual para mi gusto si hay que sobreescribir el Equals y GetHashCode, tanto > en la Entidades como en los ValueObjects. > > En las entidades dos entidades son iguales si tienen el mismo Id, y en los > ValueObjects depende de la combinación de algunas de sus propiedades. > > Yo usaría la implementación de Equals y GetHashCode de unhAddins > http://code.google.com/p/unhaddins/source/browse/uNhAddIns/uNhAddIns.ApplicationBlocks/Entities/AbstractEntity.cs?r=c68512efb777405c9acd2299472e8a70457231ec > que > funciona bien, y hace lo que comento. > > Saludos, > > El 19 de octubre de 2011 17:47, Pablo Germán Etcheverry > <[email protected]>escribió: > >> Muchisimas gracias a toooooood@s, comente el Equals y el Hashcode y me >> funciono todo.**** >> >> ** ** >> >> Mil gracias a todos.**** >> >> ** ** >> >> *A.P. Pablo Etcheverry* >> >> ** ** >> >> *De:* [email protected] [mailto: >> [email protected]] *En nombre de *Nestor Andres >> Rodriguez >> *Enviado el:* miércoles, 19 de octubre de 2011 17:20 >> *Para:* [email protected] >> *Asunto:* Re: [NHibernate-Hispano] Problema con una relacion**** >> >> ** ** >> >> Bueno, no sobreescribas el Equals y el Hashcode a menos que lo necesites. >> Se utiliza por ejemplo para los >> "valueObjects<http://en.wikipedia.org/wiki/Domain-driven_design#Building_blocks_of_DDD> >> en >> DDD" ya que su identidad es dada por los valores de sus atributos. Creo >> que >> podrias tener problemas, y no solo con NHibernate, si no eres consiente de >> la razon de sobreescribirlos. Asi que mi primer consejo es que los >> remuevas.**** >> >> ** ** >> >> Saludos,**** >> >> Nestor Andres Rodriguez**** >> >> 2011/10/18 Pablo Germán Etcheverry <[email protected]>**** >> >> Hola Nestor, la verdad que no estoy muy ducho con NH, y al equals y el >> hashcode los sobreescribo porque asi lo vi en un ejemploen internet, cual >> es >> el fin no lo se, de todas formas es algo que me iba a poner a ver mas >> adelante.**** >> >> **** >> >> *A.P. Pablo Etcheverry***** >> >> **** >> >> *De:* [email protected] [mailto: >> [email protected]] *En nombre de *Nestor Andres >> Rodriguez >> *Enviado el:* martes, 18 de octubre de 2011 18:06**** >> >> >> *Para:* [email protected] >> *Asunto:* Re: [NHibernate-Hispano] Problema con una relacion**** >> >> **** >> >> El problema es que estas asociando a la misma sesion dos instancias >> diferentes con el mismo Id. Pero antes de ir y mirar en detalle tu codigo >> y >> mapeo, te pregunto ¿Porque sobreescribes el equals y el hashcode de tus >> entidades?**** >> >> **** >> >> Saludos,**** >> >> Nestor Rodriguez**** >> >> 2011/10/18 Pablo Germán Etcheverry <[email protected]>**** >> >> Si, ya había probado cambiando eso y me sigue tirando el mismo error, te >> paso las clases y los mapping de todos los que intervienen, porque para mi >> el tema puede ser HistoriaClinica (creo!!!).**** >> >> **** >> >> HISTORIA CLINICA**** >> >> **** >> >> using System;**** >> >> using System.Collections.Generic;**** >> >> using System.Linq;**** >> >> using System.Text;**** >> >> using Iesi.Collections;**** >> >> using System.Collections;**** >> >> **** >> >> namespace Linkoyan_G_Vet.Entidades**** >> >> {**** >> >> public class HistoriaClinica**** >> >> {**** >> >> private long id;**** >> >> private int numero;**** >> >> private ISet listaAtenciones = new HashedSet();**** >> >> private ISet listaVacunacion = new HashedSet();**** >> >> private ISet listaDesparacitacion = new HashedSet();**** >> >> **** >> >> public HistoriaClinica() { }**** >> >> **** >> >> public virtual long Id**** >> >> {**** >> >> get { return id; }**** >> >> set { id = value; }**** >> >> }**** >> >> **** >> >> public virtual int Numero**** >> >> {**** >> >> get { return numero; }**** >> >> set { numero = value; }**** >> >> }**** >> >> **** >> >> public virtual ISet ListaAtenciones**** >> >> {**** >> >> get { return listaAtenciones; }**** >> >> set { listaAtenciones = value; }**** >> >> }**** >> >> **** >> >> public virtual ISet ListaVacunacion**** >> >> {**** >> >> get { return listaVacunacion; }**** >> >> set { listaVacunacion = value; }**** >> >> }**** >> >> **** >> >> public virtual ISet ListaDesparacitacion**** >> >> {**** >> >> get { return listaDesparacitacion; }**** >> >> set { listaDesparacitacion = value; }**** >> >> }**** >> >> **** >> >> public override bool Equals(object obj)**** >> >> {**** >> >> if (this == obj) return true;**** >> >> HistoriaClinica dato = obj as HistoriaClinica;**** >> >> if (dato == null) return false;**** >> >> return id == dato.id;**** >> >> }**** >> >> **** >> >> public override int GetHashCode()**** >> >> {**** >> >> return id.GetHashCode();**** >> >> }**** >> >> **** >> >> public override string ToString()**** >> >> {**** >> >> return numero.ToString();**** >> >> }**** >> >> }**** >> >> }**** >> >> **** >> >> <?xml version="1.0" encoding="utf-8" ?>**** >> >> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly=" >> Linkoyan_G-Vet" namespace="Linkoyan_G_Vet.Entidades">**** >> >> <class name="HistoriaClinica">**** >> >> <id name="Id" column="Id" type="long" unsaved-value="0">**** >> >> <generator class="identity"/>**** >> >> </id>**** >> >> <property name="Numero" type ="int" not-null="true"/>**** >> >> <set name="ListaAtenciones" table="HistoriaClinica_Atencion" lazy=" >> false" cascade="all">**** >> >> <key column="IdHistoriaClinica" />**** >> >> <one-to-many class="Atencion" not-found="exception"/>**** >> >> </set>**** >> >> <set name="ListaVacunacion" table="HistoriaClinica_Vacunacion" lazy=" >> false" cascade="all">**** >> >> <key column="IdHistoriaClinica" />**** >> >> <one-to-many class="Vacunacion" not-found="exception" />**** >> >> </set>**** >> >> <set name="ListaDesparacitacion" table=" >> HistoriaClinica_Desparacitacion" lazy="false" cascade="all">**** >> >> <key column="IdHistoriaClinica" />**** >> >> <one-to-many class="Desparacitacion" not-found="exception"/>**** >> >> </set>**** >> >> **** >> >> </class>**** >> >> </hibernate-mapping>**** >> >> **** >> >> **** >> >> VACUNACION**** >> >> using System;**** >> >> using System.Collections.Generic;**** >> >> using System.Linq;**** >> >> using System.Text;**** >> >> **** >> >> namespace Linkoyan_G_Vet.Entidades**** >> >> {**** >> >> class Vacunacion**** >> >> {**** >> >> private long id;**** >> >> private Vacuna vacuna;**** >> >> private DateTime fechaVacuna;**** >> >> private Vacuna proxVacuna;**** >> >> private DateTime fechaProxVacuna;**** >> >> private string troquel;**** >> >> **** >> >> public Vacunacion() { }**** >> >> **** >> >> public virtual long Id**** >> >> {**** >> >> get { return id; }**** >> >> set { id = value; }**** >> >> }**** >> >> **** >> >> public virtual Vacuna Vacuna**** >> >> {**** >> >> get { return vacuna; }**** >> >> set { vacuna = value; }**** >> >> }**** >> >> **** >> >> public virtual DateTime FechaVacuna**** >> >> {**** >> >> get { return fechaVacuna; }**** >> >> set { fechaVacuna = value; }**** >> >> }**** >> >> **** >> >> public virtual Vacuna ProxVacuna**** >> >> {**** >> >> get { return proxVacuna; }**** >> >> set { proxVacuna = value; }**** >> >> }**** >> >> **** >> >> public virtual DateTime FechaProxVacuna**** >> >> {**** >> >> get { return fechaProxVacuna; }**** >> >> set { fechaProxVacuna = value; }**** >> >> }**** >> >> **** >> >> public virtual String Troquel**** >> >> {**** >> >> get { return troquel; }**** >> >> set { troquel = value; }**** >> >> }**** >> >> **** >> >> public override bool Equals(object obj)**** >> >> {**** >> >> if (this == obj) return true;**** >> >> Vacunacion v = obj as Vacunacion;**** >> >> if (v == null) return false;**** >> >> return id == v.id;**** >> >> }**** >> >> **** >> >> public override int GetHashCode()**** >> >> {**** >> >> return id.GetHashCode();**** >> >> }**** >> >> **** >> >> public override string ToString()**** >> >> {**** >> >> return id.ToString();**** >> >> }**** >> >> }**** >> >> }**** >> >> **** >> >> <?xml version="1.0" encoding="utf-8" ?>**** >> >> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly=" >> Linkoyan_G-Vet" namespace="Linkoyan_G_Vet.Entidades">**** >> >> <class name="Vacunacion">**** >> >> **** >> >> <id name="Id" column="Id" type="long" unsaved-value="0">**** >> >> <generator class="identity"/>**** >> >> </id>**** >> >> <many-to-one name="Vacuna" class="Vacuna" lazy="false" cascade="all"/> >> **** >> >> **** >> >> <property name="FechaVacuna" type="DateTime" not-null="true"/>**** >> >> <many-to-one name="ProxVacuna" class="Vacuna" lazy="false" cascade=" >> all"/>**** >> >> <property name="FechaProxVacuna" type="DateTime" not-null="true"/>**** >> >> <property name="Troquel" type ="String" not-null="false" length="25"/> >> **** >> >> **** >> >> </class>**** >> >> </hibernate-mapping>**** >> >> **** >> >> **** >> >> VACUNA**** >> >> **** >> >> using System;**** >> >> using System.Collections.Generic;**** >> >> using System.Linq;**** >> >> using System.Text;**** >> >> **** >> >> namespace Linkoyan_G_Vet.Entidades**** >> >> {**** >> >> class Vacuna**** >> >> {**** >> >> private long id;**** >> >> private string nombre;**** >> >> private string codigo;**** >> >> private string descripcion;**** >> >> **** >> >> public Vacuna() { }**** >> >> **** >> >> public virtual long Id**** >> >> {**** >> >> get { return id; }**** >> >> set { id = value; }**** >> >> }**** >> >> **** >> >> public virtual String Nombre**** >> >> {**** >> >> get { return nombre; }**** >> >> set { nombre = value; }**** >> >> }**** >> >> **** >> >> public virtual String Codigo**** >> >> {**** >> >> get { return codigo; }**** >> >> set { codigo = value; }**** >> >> }**** >> >> **** >> >> public virtual String Descripcion**** >> >> {**** >> >> get { return descripcion; }**** >> >> set { descripcion = value; }**** >> >> }**** >> >> **** >> >> public override bool Equals(object obj)**** >> >> {**** >> >> if (this == obj) return true;**** >> >> Vacuna v = obj as Vacuna;**** >> >> if (v == null) return false;**** >> >> return id == v.id;**** >> >> }**** >> >> **** >> >> public override int GetHashCode()**** >> >> {**** >> >> return id.GetHashCode();**** >> >> }**** >> >> **** >> >> public override string ToString()**** >> >> {**** >> >> return nombre;**** >> >> }**** >> >> }**** >> >> }**** >> >> **** >> >> <?xml version="1.0" encoding="utf-8" ?>**** >> >> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly=" >> Linkoyan_G-Vet" namespace="Linkoyan_G_Vet.Entidades">**** >> >> <class name="Vacuna">**** >> >> <id name="Id" column="Id" type="long" unsaved-value="0">**** >> >> <generator class="identity"/>**** >> >> </id>**** >> >> <property name="Nombre" type ="String" not-null="true" length="25"/>** >> ** >> >> <property name="Codigo" type="string" not-null="true" length="4"/>**** >> >> <property name="Descripcion" type ="String" not-null="false" length=" >> 100"/>**** >> >> </class>**** >> >> </hibernate-mapping>**** >> >> **** >> >> **** >> >> **** >> >> *A.P. Pablo Etcheverry***** >> >> **** >> >> *De:* [email protected] [mailto: >> [email protected]] *En nombre de *José F. Romaniello >> *Enviado el:* martes, 18 de octubre de 2011 13:42**** >> >> >> *Para:* [email protected] >> *Asunto:* Re: [NHibernate-Hispano] Problema con una relacion**** >> >> **** >> >> Pablo me parece que tu problema esta aca:**** >> >> El 18 de octubre de 2011 10:38, Pablo Germán Etcheverry < >> [email protected]> escribió:**** >> >> <one-to-one name="Vacuna" class="Vacuna" lazy="false" cascade="all"/>* >> *** >> >> **** >> >> según el modelo que describís, la relación entre Vacunación y Vacuna >> debería ser many-to-one. Es decir que muchas vacunaciones pueden apuntar a >> la misma vacuna.**** >> >> **** >> >> correcto?**** >> >> -- >> 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**** >> >> **** >> >> **** >> >> -- >> 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**** >> >> ** ** >> >> -- >> 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 > > > > > -- > Saludos, > > Walter G. Poch > Sr. .Net Developer > -------------------------------------------- > Cell: +54 (9 341) 3353273 > [email protected] > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Enviado desde mi dispositivo móvil -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
