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
