Hola Dennis,

Algunas observaciones:

   - No enviaste la clase Persona
   - Tenes el setter publico en los Ids, asumo que tambien en la clase
   Persona. Esto es una mala practica puesto que el Id debiera manejarlo
   NHibernate y deberias asegurarte de que no se modifica accidentalmente. Mas
   sobre esto al final.
   - En la clase OtroNombre y la clase Perdir tiene una implementacion
   incorrecta de Equals y GetHashCode. La implementacion de estos dos metodos
   debe ser uniforme.

Arriesgando un diagnostico y viendo la implementacion de la propiedades Id,
sospecho que inadvertidamente estas copiando el Id entre los dos objetos.
Revisa eso, idealmente, haciendo private el setter de todos los Ids

----------------------------------
Carlos Peix

2011/11/17 Dennis Alba <[email protected]>

> saludos no he mandado las clases porque realmente mapeo con Fluent y
> se que este foro es mas bien de NHibernate puro y el problema que
> surge es de sesion, de todas formas aqui les envio las clases.
>    public partial class Dactilar
>    {
>        public virtual long IdDactilar { get; set; }
>        public virtual long VersionImpresion { get; set; }
>        public virtual string TipoImpresion { get; set; }
>        public virtual Persona aPersona { get; set; }
>    }
>
>    public partial class Foto
>    {
>        public virtual long IdFoto { get; set; }
>        public virtual byte[] ImagenRostro { get; set; }
>        public virtual Persona IdPersona { get; set; }
>    }
>
>    public partial class LugarNacDef
>    {
>        public virtual long IdPersona { get; set; }
>        public virtual Persona RPersona { get; set; }
>        public virtual string LugarNac { get; set; }
>        public virtual string FechaNac { get; set; }
>
>    }
>
>    public partial class OtroNombre
>    {
>        public virtual Persona Per_Id_Per { get; set; }
>        public virtual Persona Per_Id_Otr { get; set; }
>        public virtual DateTime? FechIdentPer { get; set; }
>        public virtual string SimilitudPer { get; set; }
>
>        public override int GetHashCode()
>        {
>            return Per_Id_Per.GetHashCode() + Per_Id_Otr.GetHashCode();
>        }
>
>        public override bool Equals(object obj)
>        {
>            return base.Equals(obj);
>        }
>    }
>
>    public partial class Perdir
>    {
>        public virtual Tramite solicitud { get; set; }
>        public virtual Persona persona { get; set; }
>        public virtual DateTime? Fech_Reg_Direc { get; set; }
>
>        public override bool Equals(object obj)
>        {
>            return base.Equals(obj);
>        }
>
>        public override int GetHashCode()
>        {
>            return solicitud.GetHashCode() + persona.GetHashCode();
>        }
>    }
>
>    public partial class Tramite
>    {
>        public virtual long IdSol { get; set; }
>        public virtual Persona PerSol { get; set; }
>        public virtual string EstSolDc { get; set; }
>        public virtual long IdFoto { get; set; }
>        public virtual long SolConsul { get; set; }
>    }
>
> he visto en algunos lugares que dicen que eso se debe a que creo en la
> sesion de hibernate otro objeto con el mismo id igual al objeto que
> deseo eliminar, pero no se  quizas con estas clases publicadas me
> puedan dar otra opinion o quizas la misma
>
> El 17/11/11, Carlos Peix <[email protected]> escribió:
> > Hola Denis,
> >
> > No veo que hayas enviado clases al principio este threado. Podrias por
> > favor enviar el codigo de la clase, al menos la implementacion de la
> > propiedad Id y del Equals y GetHashCode (estos ultimos en caso de que los
> > hayas sobreescrito)
> >
> > Gracias
> >
> > ----------------------------------
> > Carlos Peix
> >
> > 2011/11/17 Banzai <[email protected]>
> >
> >> Disculpen que no haya respondido antes, pero no estaba viniendo a la
> >> oficina,
> >> mira el problema es el siguiente: Remontense a las clases que puse al
> >> principio
> >> La situacion problemica es que yo puedo llegar a tener dos personas
> >> insertadas en el sistema p1 y p2, y en un momento determinado me
> >> percato que los dos son la misma persona, entonces deseo pasar todas
> >> las solicitudes,direcciones, fotos, lugar de nacimiento que eran de la
> >> p1 a la p2. para ello hago el siguiente algoritmo
> >>
> >> en OtroNombre  hay dos objetos persona (p1cuyo id es 49 y p2 cuyo id
> >> es 65) mas un campo que explica porque estaban como si fueran
> >> diferentes
> >>
> >> ITransaction transaction = MainClass.m_session.BeginTransaction();
> >>
> >> - metodo que reasigna la foto de p1 a p2
> >>
> >> - metodo que reasigna direccion de p1 a p2
> >>
> >> - metodo que reasigna solicitud de p1 a p2
> >>
> >> - metodo que elimina LugarNac de p1
> >>
> >> - metodo que elimina OtroNomb donde esta p1 y p2
> >>
> >> - metodo que elimina Persona p1
> >>
> >> transaction.Commit();
> >>
> >> ninguno de estos metodos hace commit adentro solo salvan en la sesion
> >> de NHibernate, estos son los ejemplos:
> >> reasignar : MainClass.m_session.Merge(direccion);
> >> eliminar: MainClass.m_session.Delete(lugarnac);
> >>
> >> todos los metodos funcionan menos el ultimo que elimina la persona el
> >> cual me da el siguiente error:
> >> a different object with the same identifier value was already
> >> associated with the session: 49, of entity: Proyecto.Persona
> >>
> >> Alguien sabe que significa este mensaje????
> >>
> >> --
> >> 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

Responder a