0

I'm trying to build a request using Criteria with 2 sum but having this error:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to Stats

Stats class:

@Entity
@Table(name = "STATS")
@Getter
public class Stats{

    @Id
    @Column(name = "STAT_ID")
    private int statId;

    @Column(name = "NB_STATS_CONFIRMED")
    private long nbStatsConfirmed;

    @Column(name = "NB_STATS_DELETED")
    private long nbStatsDeleted;

    @Column(name = "DATE_STAT")
    private Date dateStat;

}

Looks like:

STAT_ID     NB_STATS_CONFIRMED     NB_STATS_DELETED     DATE_STAT
  1                5                     2            2018-01-23
  2                2                     1            2018-01-22
  3                8                     0            2018-01-20

I want to sum NB_STATS_CONFIRMED and NB_STATS_DELETED between 2 dates (DATE_STAT).

Criteria request:

   @SuppressWarnings("unchecked")
    @Override
    public List<Stats> listStats(final Date start, final Date end) {
        Criteria cr = createRequest(); // method creating a criteria

        if (start != null) {
            cr.add(Restrictions.ge("dateStat", start));
        }
        if (fin != null) {
            cr.add(Restrictions.le("dateStat", end));
        }
        cr.setProjection(Projections.projectionList()
                .add(Projections.sum("nbStatsConfirmed"), "nbStatsConfirmed")
                .add(Projections.sum("nbStatsCanceled"), "nbStatsCanceled"));

        return cr.list();
    }

And then I call the method:

List<Stats> listStats = dao.listStats(start, end);

I tried [Ljava.lang.Object; cannot be cast to & Sum projection and results constraint

What am I doing wrong ?

C.Norris
  • 77
  • 10

1 Answers1

0

I found a solution if some one is interested but have to do 2 requests:

long nbStatsConfirmed = (long) AJobUtil.valeurDefaut((cr.setProjection(
        Projections.sum("nbStatsConfirmed"))
        .uniqueResult()), (long) 0);

long nbStatsCanceled = (long) AJobUtil.valeurDefaut((cr.setProjection(
        Projections.sum("nbStatsCanceled"))
        .uniqueResult()), (long) 0);

long[] stats = { nbStatsConfirmed, nbStatsCanceled };

return stats;

Still open if you have a different solution (with 1 request) !

C.Norris
  • 77
  • 10