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
Saludos Edgar El 28 de junio de 2011 15:29, José F. Romaniello <[email protected]>escribió: > perdon cascade="persist" bastaría > > El 28 de junio de 2011 17:28, José F. Romaniello > <[email protected]>escribió: > > No tiene que ver lo que Fabio subió con esto Angel, lo que Fabio subió es >> para que cuando tenes un one-to-many ( en el ejemplo de Edgar no hay ninguno >> ) unidireccional (sin su many-to-one) solo se haga insert sin el update que >> antes nhibernate hacía. >> >> Estoy casi seguro que el problema de Edgar se debe a que no cumple la >> segunda regla de ORM; "consistencia en memoria", >> si vos guardas >> >> var retencion = new Retencion() ; >> var factura = new factura() { Retencion = retencion } ; >> session.save(factura); >> session.save(retencion); >> >> va a fallar. Tiene que estar apuntado desde los dos lugares, para que haga >> todo de una... y probablemente necesites cascade="all" >> >> Para mantener el encapsulamiento, te sugiero utilizar un custom setter en >> alguna de las dos propiedades. >> >> Y preguntate si lo que necesitas no es una one-to-one en lugar de una >> many-to-one ;) >> >> >> >> >> >> El 28 de junio de 2011 17:16, Angel Java Lopez >> <[email protected]>escribió: >> >> Hola gente! >>> >>> Hmm... Edgar, el requerimiento de FacturaId como nullable, parece >>> relacionado con: >>> >>> http://msmvps.com/blogs/lopez/archive/2011/05/23/nhibernate_2D00_3_2D00_part_2D00_6_2D00_one_2D00_to_2D00_many_2D00_with_2D00_many_2D00_to_2D00_one.aspx >>> >>> donde se envian dos comandos (INSERT y UPDATE) por cada entidad "hija". Y >>> que el campo BookId queda con valor nulo en el insert. La doc de NHibernate >>> indica que tiene que ser nullable, pero no queda muy claro por que. >>> >>> En >>> >>> http://msmvps.com/blogs/lopez/archive/2011/05/30/nhibernate_2D00_3_2D00_part_2D00_7_2D00_one_2D00_to_2D00_many_2D00_with_2D00_inverse.aspx >>> desaparecio el problema con un atribute inverse, pero no se si se aplica >>> a tu caso. >>> >>> Entiendo que hace una semana, Fabio Maulo envio al trunk codigo que evita >>> el INSERT y el UPDATE, y hace solo Update. Con lo que la necesidad de tener >>> BookId (O FacturaId en tu caso) como nullable, ya no es mas. >>> >>> Nos leemos! >>> >>> Angel "Java" Lopez >>> http://www.ajlopez.com >>> http://twitter.com/ajlopez >>> >>> >>> 2011/6/28 Edgar Ramos <[email protected]> >>> >>>> Nestor lo habia probado como not-null="false" y el error era el mismo. y >>>> de hecho mo lo decia antes sin cambiar nada en mis mappings y unicamente >>>> habilitando "FacturaId" como null = "true" funciona muy bien. >>>> >>>> La pregunta que se me plantea es si dejo tal cual como esta funcionando >>>> "FacturaId" como null = "true", y los mappings sin tocarlos, es correcto lo >>>> que estoy haciendo, la verdad me confundi un poco >>>> >>>> Saludos >>>> >>>> Edgar >>>> >>>> El esquema no lo genero con SchemaExport, >>>> >>>> El 28 de junio de 2011 14:25, Nestor Andres Rodriguez < >>>> [email protected]> escribió: >>>> >>>> De todas maneras debes agregar el not-null = "false" en <many-to-one >>>>> name="FacturaAplicada" class="Factura" column="FacturaId" not-null = >>>>> "false"/>. >>>>> >>>>> Umm ... siempre me confundo con el not-null = "true/false" diria que >>>>> seria mas intuitivo si dijera nullable="true/false"... En fin prueba y me >>>>> cuentas. >>>>> >>>>> En caso de que no estes generando el esquema con el SchemaExport >>>>> entonces debes correr un script en la BD que cambie la llave foranea >>>>> "FacturaId" como null = "true". >>>>> Saludos, >>>>> Nestor Rodriguez >>>>> 2011/6/28 Nestor Andres Rodriguez <[email protected]> >>>>> >>>>>> Estas generando el script desde NH con SchemaExport ? >>>>>> >>>>>> >>>>>> 2011/6/28 Edgar Ramos <[email protected]> >>>>>> >>>>>>> Gente un Saludo >>>>>>> >>>>>>> Me he liado un poco con la relacion de estos objetos >>>>>>> >>>>>>> Factura y Retencion >>>>>>> >>>>>>> A una Factura le corresponde una retencion, siempre y cuando el >>>>>>> cliente lo exija, caso contrario no aplica, para este efecto >>>>>>> >>>>>>> >>>>>>> Mis clases >>>>>>> >>>>>>> public class Factura >>>>>>> { >>>>>>> ....... >>>>>>> public virtual RetencionFuenteVenta Retencion { get; set; } >>>>>>> ....... >>>>>>> } >>>>>>> >>>>>>> public class RetencionFuenteVenta >>>>>>> { >>>>>>> ........ >>>>>>> public virtual Factura FacturaAplicada { get; set; } >>>>>>> ...... >>>>>>> } >>>>>>> >>>>>>> Mis mappings >>>>>>> >>>>>>> <class name="RetencionFuenteVenta"> >>>>>>> <id name="Id"> >>>>>>> <generator class="hilo"/> >>>>>>> </id> >>>>>>> >>>>>>> ......... >>>>>>> <many-to-one name="FacturaAplicada" class="Factura" >>>>>>> column="FacturaId" /> >>>>>>> </class> >>>>>>> >>>>>>> <class name="Factura"> >>>>>>> <id name="Id"> >>>>>>> <generator class="hilo"/> >>>>>>> </id> >>>>>>> >>>>>>> <many-to-one name="Retencion" class="RetencionFuenteVenta" >>>>>>> column="RetencionId" cascade="all" /> >>>>>>> </class> >>>>>>> >>>>>>> En el esquema de la bdd, la tabla Factura tiene el campo RetencionId >>>>>>> como permitir valores nulos, que para mi >>>>>>> caso es lo que requiero. >>>>>>> Por otro lado La tabla RetencionFuenteVenta, campo FacturaId, tiene >>>>>>> tambien permitir valores nulos, no me parece >>>>>>> que sea lo correcto, pero lo puesto asi para que nh persista estas >>>>>>> entidades y lo hace sin problemas >>>>>>> >>>>>>> Pero al quitar de RetencionFuenteVenta, campo FacturaID el permitir >>>>>>> valores nulos, nh me tira un error >>>>>>> ------------------------------- >>>>>>> {"No se puede insertar el valor NULL en la columna 'FacturaID', tabla >>>>>>> 'RetencionFuenteVenta'. La columna no admite valores NULL. INSERT >>>>>>> falla.\r\n >>>>>>> Se terminó la instrucción."} >>>>>>> --------------------------------- >>>>>>> >>>>>>> Cualquier comentario o sugerencia les estoy muy agradecido >>>>>>> >>>>>>> Saludos >>>>>>> >>>>>>> Edgar >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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
