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

Responder a