Сопоставить результат 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();

Это даст вам список, с которым гораздо лучше работать.

Пример кода: https://github.com/skjenco/hibernateSandbox/blob/master/src/test/java/com/skjenco/hibernateSandbox/repository/UserProjectionExampleTest.java

Другие вопросы по тегам