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

Responder a