Сопоставить результат SQL-запроса с Java-объектом (в не-Entity классе) с помощью Spring jpa
Я хочу назначить результат запроса SQL для объекта Java, который находится в не-сущностном классе. Мой запрос подсчитывает количество записей в таблице A, сопоставленных с другой таблицей B.
@Query(value="select count(a.id) from table1 a join table2 b on a.id=b.id group by a.id", nativeQuery=true)
Не-сущность класс
public class Sample {
//assign query result to count variable
private long count;
// getters and setters
}
A и B являются классом Entity, я выбираю указанные столбцы Entity A и B и включаю эти столбцы в Sample.class и отправляю данные в виде JSON при вызове REST.
Теперь мой вопрос - присвоить результат подсчета переменной count.
заранее спасибо
1 ответ
Как сделать JPQL-запрос, используя "group by" в проекции (Non-Entity-Class)?
Сценарий: у вас есть две таблицы: User и User_Role, и вы хотите знать, сколько пользователей в вашей системе имеют роль "public" и сколько имеют роль "admin" (любые другие роли, если они есть).
Например: я хочу запрос, который даст мне знать, что есть два пользователя с "общедоступной" ролью и один пользователь с ролью "администратор".
Простейший пример:
@Query("SELECT ur.roleName, count(u.id) from User u left join u.userRole ur group by ur.roleName")
List<Object[]> getCounts();
В этом случае иметь дело с результатом сложнее, чем обычно. Вам придется перебирать как список, так и массив объектов.
Запрос в проекцию Пример:
@Query("SELECT new com.skjenco.hibernateSandbox.bean.GroupResultBean(ur.roleName, count(u.id)) from User u left join u.userRole ur group by ur.roleName")
List<GroupResultBean> getCountsToBean();
Это даст вам список, с которым гораздо лучше работать.