| 
 | 
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Добрый день! Есть две таблицы связанные отношением многие-ко-многим - User и Role. Необходимо сделать запрос с данными из этих двух таблиц, например с полями userId, userName, roleId, roleName. select u.userId, u.userName, r.roleId, r.roleName from user u, role r, user_role ur where u.userId = ur.userId and r.roleId = ur.roleId При этом нужна разбивка на страницы и сортировка. Сейчас реализовано в Spring: - есть два Entity User и Role связанные Many-to-Many - есть UserRepository и RoleRepository extends PagingAndSortingRepository Это позволяет легко получить всех User и для каждого User массив Role. Но тогда пейджинг не верный - учитываются только User, а надо как в первом запросе (учитывать и роли). Плюс не работает сортировка по Role. Есть вариант явно определить промежуточную таблицу и связать через One-To-Many и использовать UserRoleRepository. Пейджинг работает, но там возникает проблема с сортировкой и по User и по Role. Собственно вопрос такой. Как с помощью JPA получить данные сразу из двух таблиц связанных многие-ко-многим, так чтобы и сортировка динамически задавалась и пейджинг работал. Спасибо. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 11:39 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, Нельзя усидеть на двух стульях. Приходится выбирать, со стороны роли вы выборку делаете или со стороны юзверя. Напрмер, список СПРАВОЧНИК юзверей и у них массивы ролей. Если с обоих сторон то имхо каша. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 11:55 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, select u.userId, u.userName, r.roleId, r.roleName from user u, role r, user_role ur where u.userId = ur.userId and r.roleId = ur.roleId Переделать через join ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 11:56 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, Дайте пример выходных данных ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 11:58 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, >Но тогда пейджинг не верный - учитываются только User, а надо как в первом запросе (учитывать и роли). == дайте пример на пальцах. Пейджинг даст первую страницу коллекию 10 юзверей из миллиона. И что? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:01 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Пример данных: 1 | Иванов | 1 | Администратор 1 | Иванов | 2 | Руководитель 2 | Петров | 1 | Администратор 2 | Петров | 3 | Бухгалтерия 3 | Сидоров | 5 | Отдел рекламы ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:14 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Соответственно пейджинг должен работать так. Если размер страницы 3 и page=0 , то должны вернуться 3 записи 1 | Иванов | 1 | Администратор 1 | Иванов | 2 | Руководитель 2 | Петров | 1 | Администратор ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:16 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, Да. Это направление связи со стороны Справочника юзверей. Работает? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:32 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, gelListRoles() даст другой запрос и направление. И пагинацию. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:34 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra Соответственно пейджинг должен работать так. Если размер страницы 3 и page=0 , то должны вернуться 3 записи 1 | Иванов | 1 | Администратор 1 | Иванов | 2 | Руководитель 2 | Петров | 1 | Администратор Должна вернуться коллекция из двух с ленивым свойством массивом имя роли ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:38 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  авторДа. Это направление связи со стороны Справочника юзверей. Работает? Оно работает в том смысле, что возвращает всех user и у каждого user коллекция role: Page<User> users и у каждого user List<Role>roles. А надо чтобы возвращало коллекцию userId, userName, roleId, roleName: List <UserRole> где UserRole: int userId, String userName, int roleId, String roleName ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:53 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Вернее даже не List <UserRole>, а Page<UserRole> ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 12:54 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Предыдущее работает если использую связь Many-To-Many, без явного описания отдельной сущности UserRole. Если явно описываю UserRole и использую репозиторий UserRoleRepository: interface UserRoleRepository extends PagingAndSortingRepository<UserRoleRepository, String> , то соответственно возвращаются только два поля: userId и roleId. И сортировка по полям таблицы User и Role в этом случае не работает. Если сделать что-то типа Page<UserRole>findAll(pageable) и в pageable.sort = username, то будет ошибка. Потому что сформируется запрос вида select ur.* from user_role ur order by ur.username ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 13:03 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, Я имелл ввиду что надо разбить один сложный метод на два простых. gerUsersInfo() getRolesInfo() Точно так как делают в БД запросом с join. Ваш запрос выше не применяют к бд. Это полная инфа по трем таблицам и она бессмыслена. Имхо ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 13:19 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Информация нужна именно в том виде в котором я описал, и соответственно смысл есть. Если делать отдельно два простых запроса, то придется самостоятельно делать сложную реализацию пейджинга, фильтрации и сортировки. Это намного все усложняет. Сейчас только проблема в сортировке. В принципе решение может быть, если понять как указать sort в pageable так чтобы он не добавлял алиас в order by. То есть формируется запрос select u.userId, u.userName, r.roleId, r.roleName from user u, role r, user_role ur where u.userId = ur.userId and r.roleId = ur.roleId order by ur. username А надо без алиаса select u.userId, u.userName, r.roleId, r.roleName from user u, role r, user_role ur where u.userId = ur.userId and r.roleId = ur.roleId order by username Тогда должно заработать. Но как это сделать? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 13:42 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra Соответственно пейджинг должен работать так. Если размер страницы 3 и page=0 , то должны вернуться 3 записи 1 | Иванов | 1 | Администратор 1 | Иванов | 2 | Руководитель 2 | Петров | 1 | Администратор Таблица юзверей 10 чел Таблица ролей 15 ролей Таблица связей 1миллион. Вопрос: Сколько записей в КОЛЛЕКЦИИ тебе нужно при пагинации? Хотя слово записей неверное. ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 13:47 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, where u.userId = ur.userId and r.roleId = ur.roleId order by ur.username Принято запросы делать с join. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 13:49 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC Sharp shu_ra Соответственно пейджинг должен работать так. Если размер страницы 3 и page=0 , то должны вернуться 3 записи 1 | Иванов | 1 | Администратор 1 | Иванов | 2 | Руководитель 2 | Петров | 1 | Администратор Таблица юзверей 10 чел Таблица ролей 15 ролей Таблица связей 1миллион. Вопрос: Сколько записей в КОЛЛЕКЦИИ тебе нужно при пагинации? Хотя слово записей неверное. ? Ну, например, 10 записей. Плюс можно задать фильтры на имя user или имя role. Не совсем понятно, как влияет количество записей на проблему, которую я описал? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 15:38 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, Если 10 записей, то это мой вариант выше. Твой варриант - возврат миллиона. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 15:47 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC Sharp shu_ra, Если 10 записей, то это мой вариант выше. Твой варриант - возврат миллиона. То есть у меня будет 1 из 2 страниц пейбжинга. У тебя будет первая из 100000 страниц пейджинга ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 15:49 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, >то придется самостоятельно делать сложную реализацию пейджинга, фильтрации и сортировки. Это намного все усложняет = дык покажи в чем сложность то. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 15:53 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC Sharp shu_ra, Если 10 записей, то это мой вариант выше. Твой варриант - возврат миллиона. Не понятно. Запрос ограничен количеством, равным размеру страницы. Какой миллион? Не говоря о том что максимум 10 * 15 = 150. select ur.* from ur limit 10. Может быть кто-то делал выборку из таблиц связанных между собой многие-ко многим. Поделитесь пожалуйста. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 16:18 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  shu_ra, Блин, пример выше в табле миллион. Тогда твой запрос идет на миллион. Скажи сколько у тебя в средней таблице. Что сложного в в двух методах ты тоже не сказал. Я не против, ищи в вебе пример много ко много. Жди подсказок если лень пример сделать. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 17:00 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC Sharp shu_ra, >то придется самостоятельно делать сложную реализацию пейджинга, фильтрации и сортировки. Это намного все усложняет = дык покажи в чем сложность то. ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 17:02 | 
  
  
  
   | 
||
| 
 
Spring + PagingAndSortingRepository + Many-to-Many 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Покажи весь джавовый код - непонятно, что ты конкретно делаешь.  Если без UserRole модели, то должно быть как-то так: Код: java 1. 2. Если с UserRole, то непонять зачем ты там вообще держишь айдишники userId и roleId. Почему бы в этой моделе сразу не держать User и Role, и работать с ними без всяких джойнов в hql ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.06.2020, 17:38 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=59&msg=39973594&tid=2120762]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    60ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    59ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 16ms | 
| total: | 180ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...