La mejor forma de usar hibernate para consultas complejas como top n por grupo

Ahora estoy trabajando por un time en aplicaciones de informes donde uso hibernate para definir mis consultas. Sin embargo, cada vez tengo más la sensación de que, para informar casos de uso, este no es el mejor enfoque.

1) Las consultas solo dan como resultado columnas parciales y, por lo tanto, objects que no se escriben a máquina (a less que usted lance todos los campos en java). 2) Es difícil express consultas sin ir directamente a sql o hql.

Mi problema actual es que quiero get la N superior por grupo, por ejemplo, los últimos 5 días por elemento en un grupo, donde cada día visualizo la cantidad de visitantes.

El resultado debería verse así:

| RowName | 1-1-2009 | 2-1-2009 | 3-1-2009 | 4-1-2009 | 5-1-2009 | SomeName| 1 | 42 | 34 | 32 | 35 

¿Cuál es el mejor enfoque para transformar los datos que se almacenan por día por fila en un resultado como este? ¿Es hora de recurrir a sql regular y trabajar con datos sin tipo?

Realmente quiero usar objects tipeados para mis resultados, pero Java hace mi vida bastante difícil para eso. Cualquier sugerencia es bienvenida!

Usando la API Criteria, puedes hacer esto:

 Session session = ...; Criteria criteria = session.createCriteria(MyClass.class); criteria.setFirstResult(1); criteria.setMaxResults(5); ... any other criteria ... List topFive = criteria.list(); 

Para hacer esto en SQL vainilla (y para confirmar que Hibernate está haciendo lo que esperas) echa un vistazo a esta publicación SO :