Un placer poder contribuir de alguna forma!

Abrazo Carlos querido!

El sáb., 17 sept. 2016 a las 9:23, Carlos Peix (<carlos.p...@gmail.com>)
escribió:

> Gracias por compartir la solución genio!
>
> ----------------------------------
> Carlos Peix
>
> 2016-09-15 15:52 GMT-03:00 César Pistiner <chpisti...@gmail.com>:
>
>> Hola gente!
>>
>> Bueno he logrado solucionar el problema en forma más óptima y les dejo la
>> forma en que lo hice por si otro se topa con lo mismo.
>>
>> Anteriormente lo que hacía era agrupar por Id de la cabecera luego de
>> obtener la lista, pero esta claro que esto a nivel performance no es lo
>> ideal, así que encontré la forma de hacer un *DISTINCT* desde *Criteria
>> Queries*
>>
>> Si recuerdan yo creaba el *criteria* de esta forma:
>> *nhCriteria = nhCriteria.CreateCriteria("Detalles",
>> NHibernate.SqlCommand.JoinType.InnerJoin); *
>>
>> Pero para que funcione como les mencioné hay que hacer lo siguiente:
>>
>>
>>
>>
>> *var detallesCriteria =
>> DetachedCriteria.For<DetalleMovimientoDeRetornables>().SetProjection(Projections.Distinct(Projections.Property("MovimientoDeRetornables.Id")));detallesCriteria.Add(Restrictions.Eq("Producto",
>> productoAFiltrar));*
>>
>> *nhCriteria.Add(Subqueries.PropertyIn("Id", detallesCriteria));*
>>
>> Con esto quedó funcionando a la perfección.
>>
>> Saludos!
>> César
>>
>> El mié., 14 sept. 2016 a las 17:52, César Pistiner (<chpisti...@gmail.com>)
>> escribió:
>>
>>> No es eso Juan José, muchas gracias de todas formas.
>>>
>>> Sigo con el problema. Yo pensé que era algo del mapping porque si
>>> condiciono solamente por atributos de la cabecera anda perfecto, el tema
>>> está cuando creo el Criteria del detalle.
>>>
>>> Saludos y gracias!
>>>
>>> El mié., 14 sept. 2016 a las 17:14, Juan José Montes de Oca Arbós (<
>>> juanjose.montesdeocaar...@gmail.com>) escribió:
>>>
>>>> Hola Cesar, no estoy 100% seguro, pero se me ocurre que si no tenés
>>>> implementados los métodos de Equals y GetHashCode (o los tenés mal
>>>> implementados) NHibernate podría devolverte dos objetos que para vos son
>>>> iguales, pero para NH son diferentes. Se que esto ocurre cuando manejas los
>>>> objetos en memoria, pero no se si ocurre en el caso de consultarlos a la
>>>> base de datos.
>>>>
>>>> Saludos Y ÉXITOS!!
>>>>
>>>> --
>>>> Juan José Montes de Oca Arbós.
>>>>
>>>> ===========================
>>>> Web personal: http://juanjose.montesdeocaarbos.com.ar/blog/
>>>>
>>>> El 14 de septiembre de 2016, 17:05, César Pistiner <
>>>> chpisti...@gmail.com> escribió:
>>>>
>>>>> Hola gente,
>>>>>
>>>>> Estoy teniendo un problema y no le encuentro la vuelta. Usando
>>>>> NHibernate con Criteria Queries tengo una entidad que es cabecera-detalle 
>>>>> y
>>>>> cuando obtengo una lista en la cual debo condicionar el detalle me trae un
>>>>> objeto (cabecera) por cada detalle que tenga. El ejemplo sería así, basado
>>>>> en movimientos de stock:
>>>>>
>>>>> Tengo 2 movimientos:
>>>>> - MOVIMIENTO 1
>>>>> - MOVIMIENTO 2
>>>>>
>>>>> Detalle de MOVIMIENTO 1:
>>>>> - PRODUCTO A - ENTRADA x 10 - POSICION 001
>>>>> - PRODUCTO A - ENTRADA x 20 - POSICION 002
>>>>>
>>>>> Detalle de MOVIMIENTO 1:
>>>>> - PRODUCTO B - ENTRADA x 10 - POSICION 001
>>>>> - PRODUCTO B - ENTRADA x 20 - POSICION 002
>>>>>
>>>>> Si obtengo una lista condicionando los movimientos con PRODUCTO A,
>>>>> estoy recibiendo una lista que contiene 2 cabeceras, con 2 detalles cada
>>>>> una. Si inspeccionó dicha lista veo que es el mismo movimiento (MOVIMIENTO
>>>>> 1) duplicado.
>>>>>
>>>>> Ese es el problema, el cual estoy resolviendo con agrupación luego de
>>>>> obtener la lista.
>>>>>
>>>>> El mapping contra los detalles lo tengo así:
>>>>>
>>>>> CABECERA
>>>>> <bag name="Detalles" table="DetalleMovimiento" inverse="true"
>>>>> cascade="all,delete-orphan" lazy="true">
>>>>>   <key column="IdMovimiento"/>
>>>>>   <one-to-many class="DetalleMovimiento"/>
>>>>> </bag>
>>>>>
>>>>> DETALLE
>>>>> <many-to-one name="Movimiento" column="IdMovimiento"
>>>>> class="Movimiento" foreign-key="FK_DetalleMovimiento_Movimiento"/>
>>>>>
>>>>> Luego a través de Criteria Queries lo que hago es:
>>>>>
>>>>> nhCriteria = nhCriteria.CreateCriteria("Detalles",
>>>>> NHibernate.SqlCommand.JoinType.InnerJoin);
>>>>>
>>>>> nhCriteria.Add(Restrictions.Eq("Producto", productoAFiltrar));
>>>>>
>>>>> Eso es todo (creo), agradezco cualquier sugerencia o ayuda, tal vez es
>>>>> un error común, las soluciones que encontré navegando no me dieron
>>>>> resultado.
>>>>>
>>>>> Espero haber sido claro y desde ya agradezco el tiempo robado!
>>>>>
>>>>> Aprovecho para saludarlos y agradecer todos los aportes que hacen.
>>>>> César
>>>>>
>>>> --
>>>>> --
>>>>> Para escribir al Grupo, hágalo a esta dirección:
>>>>> NHibernate-Hispano@googlegroups.com
>>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>>>> ---
>>>>> Has recibido este mensaje porque estás suscrito al grupo
>>>>> "NHibernate-Hispano" de Grupos de Google.
>>>>> Para anular la suscripción a este grupo y dejar de recibir sus
>>>>> mensajes, envía un correo electrónico a
>>>>> nhibernate-hispano+unsubscr...@googlegroups.com.
>>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout
>>>>> .
>>>>>
>>>>
>>>> --
>>>> --
>>>> Para escribir al Grupo, hágalo a esta dirección:
>>>> NHibernate-Hispano@googlegroups.com
>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>>> ---
>>>> Has recibido este mensaje porque estás suscrito al grupo
>>>> "NHibernate-Hispano" de Grupos de Google.
>>>> Para anular la suscripción a este grupo y dejar de recibir sus
>>>> mensajes, envía un correo electrónico a
>>>> nhibernate-hispano+unsubscr...@googlegroups.com.
>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>>
>>> --
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> NHibernate-Hispano@googlegroups.com
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> ---
>> Has recibido este mensaje porque estás suscrito al grupo
>> "NHibernate-Hispano" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
>> envía un correo electrónico a
>> nhibernate-hispano+unsubscr...@googlegroups.com.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>
>
> --
> --
> Para escribir al Grupo, hágalo a esta dirección:
> NHibernate-Hispano@googlegroups.com
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> ---
> Has recibido este mensaje porque estás suscrito al grupo
> "NHibernate-Hispano" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a
> nhibernate-hispano+unsubscr...@googlegroups.com.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
NHibernate-Hispano@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
--- 
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" 
de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía 
un correo electrónico a nhibernate-hispano+unsubscr...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Responder a