java sql hibernate hibernate-criteria

java - hql order by date



Objeto Hibernate Group by Criteria (3)

Consulte this para obtener el ejemplo. El punto principal es usar groupProperty() y las funciones agregadas relacionadas proporcionadas por la clase Projections .

Por ejemplo :

SELECT column_name, max(column_name) , min (column_name) , count(column_name) FROM table_name WHERE column_name > xxxxx GROUP BY column_name

Su objeto de criterio equivalente es:

List result = session.createCriteria(SomeTable.class) .add(Restrictions.ge("someColumn", xxxxx)) .setProjection(Projections.projectionList() .add(Projections.groupProperty("someColumn")) .add(Projections.max("someColumn")) .add(Projections.min("someColumn")) .add(Projections.count("someColumn")) ).list();

Me gustaría implementar la siguiente consulta SQL con los criterios de Hibernate:

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name <operator> value GROUP BY column_name

Intenté implementar esto con Hibernate Criteria pero no funcionó.

¿Alguien puede darme un ejemplo de cómo se puede hacer esto con Hibernate Criteria? ¡Gracias!


Puede usar las menciones de @Ken Chan de acercamiento y agregar una sola línea de código después de eso si desea una lista específica de Objetos, por ejemplo:

session.createCriteria(SomeTable.class) .add(Restrictions.ge("someColumn", xxxxx)) .setProjection(Projections.projectionList() .add(Projections.groupProperty("someColumn")) .add(Projections.max("someColumn")) .add(Projections.min("someColumn")) .add(Projections.count("someColumn")) ).setResultTransformer(Transformers.aliasToBean(SomeClazz.class)); List<SomeClazz> objectList = (List<SomeClazz>) criteria.list();


GroupBy usando en Hibernate

Este es el código resultante

public Map getStateCounts(final Collection ids) { HibernateSession hibernateSession = new HibernateSession(); Session session = hibernateSession.getSession(); Criteria criteria = session.createCriteria(DownloadRequestEntity.class) .add(Restrictions.in("id", ids)); ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.groupProperty("state")); projectionList.add(Projections.rowCount()); criteria.setProjection(projectionList); List results = criteria.list(); Map stateMap = new HashMap(); for (Object[] obj : results) { DownloadState downloadState = (DownloadState) obj[0]; stateMap.put(downloadState.getDescription().toLowerCase() (Integer) obj[1]); } hibernateSession.closeSession(); return stateMap; }