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

Responder a