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
