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