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

Responder a