J'essaye de grouper par mois certaines lignes en utilisant HQL, mais je suis un peu nouveau dans cette API et je n'arrive pas à l'obtenir.HQL: groupe par mois
Voici mon code:
Criteria query = getHibernateSession().createCriteria(SalesPerformance.class);
// summary report is grouped by date
query.setProjection(Projections.projectionList().add(
Projections.groupProperty("effectiveDate"), "effectiveDate").add(
Projections.groupProperty("primaryKey.seller", "seller").add(
Projections.sum("totalSales"))));
// sub-select based on seller id
query.add(Property.forName("primaryKey.seller.id").eq(sellerId)).setFetchMode(
"primaryKey.seller", FetchMode.SELECT);
query.add(Property.forName("primaryKey.effectiveDate").le(new Date()));
query.add(Property.forName("primaryKey.effectiveDate").ge(DateUtils.truncate(new Date(), Calendar.MONTH)));
query.addOrder(Order.desc("primaryKey.effectiveDate"));
return query.list();
Mon problème avec cette requête est qu'il va retourner une ligne par jour quand j'ai besoin d'une ligne par mois à cause de Projections.groupProperty (« effectiveDate »). J'ai envisagé d'utiliser Projections.sqlGroupProjection au lieu de Projections.groupProperty et de lancer quelques HQL, mais la documentation et les exemples de couple que j'ai trouvés ne m'ont pas vraiment aidé à comprendre comment j'allais mettre la bonne instruction postresql dans ce méthode.
Quelqu'un qui connaît Postgres et HQL pourrait donner quelques conseils s'il vous plaît?
Ceci n'utilise pas HQL d'Hibernate, c'est l'utilisation des critères d'Hibernate. Il ne devrait pas être étiqueté comme HQL. – James