CriteriaBuilder cb = s.getCriteriaBuilder();
CriteriaQuery<Tuple> query = cb.createTupleQuery();
Root<TestEntity> r = query.from(TestEntity.class);
CriteriaBuilder.Case<Long> case1 = cb.selectCase();
case1.when(cb.equal(r.<TestEnum>get("enumField"), cb.literal(TestEnum.VAL_1)), r.<Long>get("value"));
case1.otherwise(cb.nullLiteral(Long.class));
CriteriaBuilder.Case<Long> case2 = cb.selectCase();
case2.when(cb.equal(r.<TestEnum>get("enumField"), cb.literal(TestEnum.VAL_2)), r.<Long>get("value"));
case2.otherwise(cb.nullLiteral(Long.class));
query
.select(cb.tuple(r.<TestEnum>get("enumField").alias("enumField"), cb.sum(case1).alias("VAL_1"), cb.sum(case2).alias("VAL_2")))
.groupBy(r.<TestEnum>get("enumField"));