Gracias Fabio. El 21 de septiembre de 2010 13:34, Fabio Maulo <[email protected]>escribió:
> Si necesitas hacer esa comparacción server-side (en el RDBMS) la solucción > mas rapida es denormalizar CantidadDisponible persistiendola > (access="ReadOnly"). > > Con ConfORM sería: > orm.PersistentProperty<PartidaDeSemilla>(ps => ps.CantidadDisponible); > > 2010/9/21 Nicolás Marzoni <[email protected]> > > Buen día a todos. >> >> Implementamos el patrón quantity descripto por Martin Fowler, >> http://martinfowler.com/ap2/quantity.html, y lo tenemos mapeado como >> un component. >> >> Lo que me gustaría hacer es armar una consulta que esté filtrada por >> la comparación de los dos component. >> >> Aca les dejo el mapping. >> >> <?xml version="1.0" encoding="utf-8"?> >> <hibernate-mapping >> xmlns="urn:nhibernate-mapping-2.2" >> namespace="Entidades" >> assembly="Entidades"> >> <class name="PartidaDeSemilla" table="PartidasDeSemilla" >> lazy="true"> >> >> <id name="IdPartidaDeSemilla" column="IdPartidaDeSemilla" >> type="Int32" unsaved-value="0"> >> <generator class="native" /> >> </id> >> >> ... >> >> <component name="CantidadTotal" class="Cantidad"> >> <property name="Valor" column="CantidadTotal" not-null="true" >> type="decimal(18,4)"/> >> <many-to-one name="Unidad" class="Unidad" >> column="IdUnidadCantidadTotal" not-null="true"/> >> </component> >> >> <component name="CantidadReservada" class="Cantidad"> >> <property name="Valor" column="CantidadReservada" not- >> null="true" type="decimal(18,4)"/> >> <many-to-one name="Unidad" class="Unidad" >> column="IdUnidadCantidadReservada" not-null="true"/> >> </component> >> >> ... >> >> </class> >> </hibernate-mapping> >> >> La idea es filtrar las partidas de semilla y quedarme solo con >> aquellas donde CantidadTotal > CantidadReservada. En la clase >> PartidaDeSemilla hay una property CantidadDisponible que devuelve la >> resta entre CantidadTotal y CantidadReservada. >> >> Aca está la clase >> >> namespace Entidades >> { >> public class PartidaDeSemilla >> { >> private int idPartidaDeSemilla; >> private Cantidad cantidadTotal; >> private Cantidad cantidadReservada; >> >> >> public virtual int IdPartidaDeSemilla >> { >> get { return idPartidaDeSemilla; } >> set { idPartidaDeSemilla = value; } >> } >> >> ... >> >> public virtual Cantidad CantidadTotal >> { >> get { return cantidadTotal; } >> set { cantidadTotal = value; } >> } >> >> public virtual Cantidad CantidadReservada >> { >> get { return cantidadReservada; } >> set { cantidadReservada = value; } >> } >> >> public virtual Cantidad CantidadDisponible >> { >> get { return CantidadTotal - cantidadReservada; } >> } >> >> ... >> } >> } >> >> Intenté crear la consulta filtrando los resultados por >> CantidadDisponible, pero al no estar mapeada dio un error. >> Como debería mapear la property CantidadDisponible o bien como >> comparar los component (CantidadTotal y CantidadReservada) >> >> Probé filtrar la consulta, que realizo con Criteria, con la expression >> Expression.GtProperty("CantidadTotal", "CantidadReservada"), pero >> compara cada uno de los campos del component >> >> ... >> WHERE >> this_.IdSemilla = @p0 >> and ( >> this_.CantidadTotal > this_.CantidadReservada >> and this_.IdUnidadCantidadTotal > >> this_.IdUnidadCantidadReservada >> ); >> >> Cualquier ayuda será de gran utilidad. >> Saludos. >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano > > > > > -- > Fabio Maulo > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Nicolás Matías Marzoni -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
