在Java JPA中返回一张地图?

时间:2015-08-27 12:03:16

标签: java mysql jpa

我有一个名为rating的表格如下:

id | score | article_id

得分可以是1到5。

我想要一个单独的查询,返回得分为5,得分为4,得分为3,得分为2,得分为1的数量。因为我不想为此任务运行5个查询。 如果查询可以返回如下地图将是方便的:

  • 关键是分数从1到5

  • 该分数的相应数字

  • 的值

有没有办法(或类似)实现这一目标? 我正在使用Java JPA,MySQL 5.x

2 个答案:

答案 0 :(得分:3)

创建返回类型为Object []的普通查询,如:

Query query = entityManager.createQuery("Select count(r), r.score from Rating r group by r.score");

然后: List<Object[]> results = query.getResultList(); 并且您可以迭代它并从results[0]results[1]

获得结果

答案 1 :(得分:1)

以下是使用CriteriaQuery的解决方案:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> query = cb.createQuery(Object[].class);
Root<Rating> rating = query.from(Rating.class);
query.multiselect(rating.get("score"), cb.count(rating)).groupBy(rating.get("score"));

List<Object[]> results = em.createQuery(query).getResultList();
System.out.println("score | count\n-----------");
for(Object[] object : results){
    System.out.println(object[0] + " | " + object[1]);
}

这假设您的评级实体类名称为Rating