Consulta HQL o Criteria ordenando por fecha

294 views
Skip to first unread message

Rodrigo Juarez

unread,
Oct 22, 2008, 6:01:21 PM10/22/08
to NHibernate-Hispano
Hola a todos

Necesito una consulta, HQL o Criteria que me devuelva instancias de
Movimiento aplicando un filtro sobre el estado del ultimo movimiento
(ordenado por fecha)

Tengo dos clases

Movimiento
Propiedades
Numero
Importe

EstadoMovimiento
Propiedades
Movimiento (de la clase movimiento)
Estado
Fecha

Ejemplo

Movimiento1
Numero = 1
Importe = 100

Estado1
Movimiento = Movimiento1
Estado = Entregado
Fecha = 20081201

Estado2
Movimiento = Movimiento1
Estado = Rechazado
Fecha = 20090101

Movimiento2
Numero = 2
Importe = 200

Estado3
Movimiento = Movimiento2
Estado = Rechazado
Fecha = 20081001

Estado4
Movimiento = Movimiento2
Estado = Entregado
Fecha = 20090101

Entonces si por ejemplo filtro por estado rechazado, el resultado
deberia ser el movimiento 1, ya que su ultimo estado es el de
rechazado

Se puede hacer con una sola consulta hql o Criteria? algun lugar donde
buscar informacion al respecto?

Desde ya muchas gracias por su ayuda

Gustavo Ringel

unread,
Oct 22, 2008, 6:11:06 PM10/22/08
to NHibernat...@googlegroups.com
Algo asi?

select e1.Movimiento
from EstadoMovimiento e1
where e1.Estado=Rechazado
and fecha >=
  (select max(e2.fecha)
   from EstadoMovimiento e2
   where e2.Movimiento = e1.Movimiento)
order by e1.Fecha

Rodrigo Juarez

unread,
Oct 22, 2008, 6:41:53 PM10/22/08
to NHibernate-Hispano
Hola, gracias por responder

Si no entendi mal, eso me traeria la ultima fecha de todos los
estados?, cuando en realidad necesito la ultima fecha (que seria el
ultimo estado) para cada movimiento
Pero calculo que con un group by en la sub consulta deberia andar,
verdad?

Saludos!!

On 22 oct, 19:11, "Gustavo Ringel" <gustavo.rin...@gmail.com> wrote:
> Algo asi?
>
> select e1.Movimiento
> from EstadoMovimiento e1
> where e1.Estado=Rechazado
> and fecha >=
>   (select max(e2.fecha)
>    from EstadoMovimiento e2
>    where e2.Movimiento = e1.Movimiento)
> order by e1.Fecha
>
> On Thu, Oct 23, 2008 at 12:01 AM, Rodrigo Juarez
> <rodrigomjua...@gmail.com>wrote:
> > Desde ya muchas gracias por su ayuda- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Diego Jancic

unread,
Oct 22, 2008, 6:46:27 PM10/22/08
to NHibernat...@googlegroups.com
Hola,
El group by ya esta hecho con el "where e2.Movimiento = e1.Movimiento", por
lo que el max(fecha) va a ser solo dentro de ese estado...
Igual con esa consulta deberías tener cuidado si 2 estados del mismo
movimiento tienen la misma fecha, porque podes tener registros duplicados...

Se soluciona muy fácil con un distinct, pero es lento... si puede darse el
caso (por ejemplo porque el usuario entra la fecha y siempre es redonda)
deberías tener cuidado..

Saludos,
Diego

Gustavo Ringel

unread,
Oct 23, 2008, 2:46:28 AM10/23/08
to NHibernat...@googlegroups.com
lo que dice diego es asi, y por supuesto que en el Forum damos tips y no resolvemos problemas al detalle porque no podemos meternos al detalle en todas las complicaciones del dominio de trabajo de cada participante, para eso se puede pagarle horas a Fabio u otros Freelancers que hay en el grupo y son expertos y confiables para esas tareas.
Yo di una guia de como hacerlo nada mas, la solucion exacta buscala vos en funcion del sistema que estas haciendo o pagando algunas horas para optimizar las consultas a gente como Fabio que dedica voluntariamente muchisimas horas de su vida para que tengamos una herramienta como NH.

Gustavo.

2008/10/23 Diego Jancic <jan...@gmail.com>

Rodrigo Juarez

unread,
Oct 23, 2008, 11:11:45 AM10/23/08
to NHibernat...@googlegroups.com

Muchas gracias por la ayuda!

 

Por el problema de las fechas, termine guardando el último estado dentro del movimiento, por lo que se simplifico mucho el tema de la consulta.

En mi dominio particular no solo es un problema que devuelva registros duplicados, sino que puede estar devolviendo un registro cuyo último estado no es el deseado.

La información de estados es solo para consulta de la historia del movimiento

 

Por regla general, cuando un valor puede calcularse, trato de no incluirlo en el objeto, pero para consultas y performance, sabe traerme problemas (por ejemplo el saldo de comprobantes afectados)

¿NHibernate permite manejar campos calculados en el mapeo?

 

Saludos

 


Fabio Maulo

unread,
Oct 23, 2008, 11:32:30 AM10/23/08
to NHibernat...@googlegroups.com
dos tags
formula
generated
--
Fabio Maulo

Rodrigo Juarez

unread,
Oct 23, 2008, 12:05:28 PM10/23/08
to NHibernat...@googlegroups.com

Gracias ;)

 


Juan Pablo Rubio

unread,
Oct 23, 2008, 3:40:36 PM10/23/08
to NHibernat...@googlegroups.com

Hola Todos tengo una pregunta, tengo dos clases una trayectos y otra tarifaRecargo, el id de la primera es de tipo int y el de la otra es GUID, y la clase tarifa tiene una a asociación con la clase trayectos pero cuando compila me sale el siguiente error "Association references unmapped class:

TarifaRecargo", esta es una aplicación que estoy terminando para poderme graduar.. mi entrega final es la otra semana... agradezco mucho su colaboración.

 

 

Los mappings son estos:

 

########---TarifaRecargo----##########

 

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"

namespace="SIAC.Clases" assembly="SIAC">

  <class name="TarifaRecargo" table="Tarifas_Recargos">

    <id     name="codigoTarifaRecargo"

access="nosetter.camelcase-underscore"   column="codigoTarifaRecargo"

type="Guid" >

      <generator class="assigned" />  

    </id>

    <many-to-one name="fk_codigoTrayecto" class="Trayecto"

column="fk_codigoTrayecto"/>

  </class>

</hibernate-mapping>

 

########---Trayectos----##########

<?xml version="1.0" encoding="utf-8"?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"

  namespace="SIAC.Clases" assembly="SIAC">

  <class name="Trayecto" table="Trayectos" >

    <id

      name="codigoTrayecto"

      access="nosetter.camelcase-underscore"

      column="codigoTrayecto"

      unsaved-value="0"

      type="Int32">

      <generator class="native"/>

    </id>

   

    <many-to-one name="fk_codigoCiudadOrigen" class="Ciudad"

column="fk_codigoCiudadOrigen" fetch="join"/>

    <many-to-one name="fk_codigoCiudadDestino" class="Ciudad"

column="fk_codigoCiudadDestino" fetch="join"/>

 

    

    <bag name="tarifasDeRecargos" fetch="select" inverse="true">

      <key column="fk_codigoRecargo"/>

      <one-to-many class="TarifaRecargo"/>

    </bag>

   

  </class>

</hibernate-mapping>

 

 

Las clases son estas

 

public class TarifaRecargo

    {

      private Guid _codigoTarifaRecargo;

      private Trayecto _fk_codigoTrayecto;

 

      public virtual Guid codigoTarifaRecargo

      {

          get { return _codigoTarifaRecargo; }

          set { _codigoTarifaRecargo = value; }

      }

      public virtual Trayecto fk_codigoTrayecto

      {

          get { return _fk_codigoTrayecto; }

          set { _fk_codigoTrayecto = value; }

      }

  }

 

public class Trayecto

    {

        private int _codigoTrayecto;

        private Ciudad _fk_codigoCiudadOrigen;

        private Ciudad _fk_codigoCiudadDestino;

        private IList _tarifasDeRecargos;

 

 

        public virtual int codigoTrayecto

        {

            get { return _codigoTrayecto; }

            set { _codigoTrayecto = value; }

 

        }

        public virtual Ciudad fk_codigoCiudadOrigen

        {

            set { _fk_codigoCiudadOrigen = value; }

            get { return _fk_codigoCiudadOrigen; }

        }

        public virtual Ciudad fk_codigoCiudadDestino

        {

            set { _fk_codigoCiudadDestino = value; }

            get { return _fk_codigoCiudadDestino; }

        }

        public virtual IList tarifasDeRecargos

        {

            get { return _tarifasDeRecargos; }

            set { _tarifasDeRecargos = value; }


No virus found in this incoming message.
Checked by AVG - http://www.avg.com
Version: 8.0.175 / Virus Database: 270.8.2/1735 - Release Date: 23/10/2008 7:54

Fabio Maulo

unread,
Oct 23, 2008, 4:26:53 PM10/23/08
to NHibernat...@googlegroups.com

Juan Pablo Rubio

unread,
Oct 23, 2008, 5:21:22 PM10/23/08
to NHibernat...@googlegroups.com

Ok anotado gracias

 

De: NHibernat...@googlegroups.com [mailto:NHibernat...@googlegroups.com] En nombre de Fabio Maulo


Enviado el: jueves, 23 de octubre de 2008 15:27
Para: NHibernat...@googlegroups.com

Fabio Maulo

unread,
Oct 23, 2008, 5:59:25 PM10/23/08
to NHibernat...@googlegroups.com
2008/10/23 Juan Pablo Rubio <juan....@telmex.net.co>

Ok anotado gracias


Mirá despues de portarte como un nene de 3 años ... no se... hay veces que me dejan sin palablar... pero bueno.

Te olvidaste el embedded resources en el XML de TarifaRecargo o configuraste mal NH y no ecuentra ese file.

Las clases mejor ni la miro porque ya cuando vi en el mapping una propiedad de nombre "fk_codigoTrayecto" me tuve que tomar un Uvasal.
Como me estoy preparando Milanesas a la napolitana (un plato que puede existir solo acá) y quiero digerilas prefiero no llegar a mirar esas clases.

Esas reglas, en lugar de meterla en el bookmark, trata de leerlas y aprenderlas no solo para este forum y sobre todo trata de respectarlas porque mandaste 3 veces el mismo mail y siempre contestando a lo de otros (a mi eso me suena a tomada de pelo y ya estoy grandecito para bancarme eso).

--
Fabio Maulo

Juan Pablo Rubio

unread,
Oct 23, 2008, 6:12:07 PM10/23/08
to NHibernat...@googlegroups.com

Fabio mil gracias, al igual a todos mil disculpas por mi falta de sentido común..

 

De: NHibernat...@googlegroups.com [mailto:NHibernat...@googlegroups.com] En nombre de Fabio Maulo
Enviado el: jueves, 23 de octubre de 2008 16:59
Para: NHibernat...@googlegroups.com
Asunto: [NHibernate-Hispano] Re: FABIO AYUDA POR FAVOR

 

2008/10/23 Juan Pablo Rubio <juan....@telmex.net.co>

--
Fabio Maulo

Reply all
Reply to author
Forward
0 new messages