Jose En el mail anterior no quedo claro de mi parte que este linea session.save(retencion), no la estoy utilizando
Saludos Edgar El 28 de junio de 2011 15: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
