2015-08-27 3 views
1

У меня есть таблица под названием рейтинг выглядит следующим образом:Вернуть карту в Java JPA?

id | score | article_id 

оценка может быть от 1 до 5.

Я хочу иметь один запрос, который возвращает количество забитых-5s, забитые-4s, забил-3, забил-2, забил-1. Потому что я не хочу запускать 5 запросов для этой задачи. Было бы удобно, если запрос может быть возвращен карта, как:

  • Ключ счет от 1 до 5

  • значение, если соответствующее число, что оценка

Есть ли способ (или аналогичный) для достижения этого? Я использую Java JPA, MySQL 5.x

+1

Какая вы используете JPA? Нет стандартного способа возврата карты в виде результата в JPA. Тем не менее он может быть доступен как специфическая для провайдера. Например, EclipseLink действительно поддерживает его - 'query.setHint (QueryHints.RESULT_TYPE, ResultType.Map);'. – Tiny

+0

Я использую реализацию JPA в платформе Play, которая использует реализацию Hibernate. – ipkiss

+0

Я думаю, вам нужно будет решить вопрос «Результат ». Вы можете преобразовать это в «Карта», если хотите, но только с 5 ключами, которые я не вижу. Любой из приведенных ответов должен работать на вас. –

ответ

2

Создать обычный запрос, которые возвращают тип 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

Здесь раствор с помощью 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.

Смежные вопросы