Un placer poder contribuir de alguna forma! Abrazo Carlos querido!
El sáb., 17 sept. 2016 a las 9:23, Carlos Peix (<[email protected]>) escribió: > Gracias por compartir la solución genio! > > ---------------------------------- > Carlos Peix > > 2016-09-15 15:52 GMT-03:00 César Pistiner <[email protected]>: > >> 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 (<[email protected]>) >> 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 (< >>> [email protected]>) 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 < >>>> [email protected]> 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: >>>>> [email protected] >>>>> 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 >>>>> [email protected]. >>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout >>>>> . >>>>> >>>> >>>> -- >>>> -- >>>> Para escribir al Grupo, hágalo a esta dirección: >>>> [email protected] >>>> 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 >>>> [email protected]. >>>> Para acceder a más opciones, visita https://groups.google.com/d/optout. >>>> >>> -- >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> 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 >> [email protected]. >> Para acceder a más opciones, visita https://groups.google.com/d/optout. >> > > -- > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > 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 > [email protected]. > Para acceder a más opciones, visita https://groups.google.com/d/optout. > -- -- Para escribir al Grupo, hágalo a esta dirección: [email protected] 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 [email protected]. Para obtener más opciones, visita https://groups.google.com/d/optout.
