Hola Edgar, Para relaciones bidireccionales uno-a-uno tienes dos opciones como dijo Jose. Una es a travez de UNA llave foranea y la otra es a travez de llaves primarias.
1. Para mepear a travez de UNA unica llave foranea (no dos como tienes en este momento). Requieres un many-to-one en la clase que mapea a la tabla con la llave foranea, en este caso podria ser Retencion. Y un one-to-one en la tabla que NO tiene la llave foranea, en este caso seria Factura. ejemplo: - En el mapeo de Retencion: <many-to-one name="Retencion" class="RetencionFuenteVenta" column="RetencionId" cascade="all" unique="true"/> (unique=true para asegurar que unicamente puede haber una retencion por factura, esto asegura la relacion uno-a-uno. El unique funciona solo para generar el esquema, si tu lo generas entonces debes agregar un constraint en la BD para asegurar que el campo Retenion->FacturaId es unico) - En el mapeo de Factura: <one-to-one name="FacturaAplicada" class="Factura" /> (En la tabla factura ya no existiria una llave foranea a Retencion). 2. Para mapear a travez de llaves primarias ( cuyo objetivo es que ambas entidades siempre tengan el mismo ID), se hace SIN llaves foraneas y en ambos mapeos de Retencion y Factura debes colocar un <one-to-one> pero debes escoger cual de las dos clases es la que maneja el ID y la "esclava" se mapea como dijo Jose, utilizando en el <generator name="foreign"> ... con parametros adicionales. Creo que esta no se acomoda a tu situacion asi que utiliza la opcion de llaves foraneas. De todas maneras para mayor informacion ve a este link<http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-onetoone> En conclusion te sobra una llave foranea y debes remplazar en alguno de los dos lados un <many-to-one> por un <one-to-one/>. Saludos, Nestor Andres Rodriguez 2011/6/28 Edgar Ramos <[email protected]> > Jose > > Hice algunos cambios sugeridos, pero sigo igual . > Con las clases que expuse en el mensaje anterior. y tomando en cuenta que > Factura tiene una relacion 0..1 a Retencion y a su vez Retencion tiene 1..1 > a Factura, pretendia que a nivel de BDD, me quedara algo como esto > > Factura > ID RetencionID > 100 null > 101 200 > 102 null > 103 300 > > Retencion > ID FacturaID > 200 101 > 300 103 > > En la tabla Retencion tenia FacturaID como null= false, y nh me tiraba el > error comentado, dejandolo como null=true, nh > persiste sin problemas, pero como comentaba Nestor, > Creo que voy a eliminar de la Tabla Retencion, la columna FacturaID, me > parece mejor esta solucion que, dejar null=true, > el campo FacturaID, aunque nh lo persista bien > > Nuevamente sus comentarios y sugerencias son bienvenidos > > Saludos > Edgar > > > > > > El 28 de junio de 2011 17:15, José F. Romaniello > <[email protected]>escribió: > > nhibernate tiene dos formas de manejar un one-to-one en la bd; >> >> - facturaId en la tabla retención es una columna unique >> - facturaid es la clave primaria de retención. En el generator del id >> de retención se utiliza "foreign" >> >> >> El 28 de junio de 2011 19:12, José F. Romaniello >> <[email protected]>escribió: >> >> entonces retencion => factura es one-to-one. >>> >>> El 28 de junio de 2011 19:05, Edgar Ramos <[email protected]>escribió: >>> >>> Me parece que estoy obviando que para mi caso, una Factura tiene 0..1 >>>> Retencion, y una Retencion tiene una y solo una Factura asociada >>> >>> >>> >> -- >> 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
