Сопоставить результат SQL-запроса с Java-объектом (в не-Entity классе) с помощью Spring jpa - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу присвоить результат запроса 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)

Не-класс Entity

   public class Sample {

    //assign query result to count variable
    private long count;
   // getters and setters


    }

A и B - это класс Entity, я выбираюуказанные столбцы сущностей A и B, включая эти столбцы в Sample.class и отправку данных в виде JSON при вызове REST.

Теперь мой вопрос заключается в назначении результата подсчета переменной count.

Спасибо зазаранее

1 Ответ

0 голосов
/ 21 сентября 2018

Как выполнить запрос 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...