Отображение только участников, принадлежащих к определенной команде весной

#spring

Вопрос:

Я пытаюсь обновить свое веб-приложение Spring / React, чтобы в нем были разные команды, и когда пользователь смотрит на свою команду, отображаются только члены этой команды.

До сих пор у меня есть Society сущность @OneToMany , имеющая отношения с User

 User
@ManyToOne
    @JoinColumn(name = "society_id")
    private Society society;

-------------------------------------
Society
@JsonIgnore
    @OneToMany(mappedBy = "society")
    private List<User> users;
 

Я реализовал так, что при создании нового пользователя они назначаются обществу, в котором находится человек, их создавший.

Я не пытаюсь реализовать так, чтобы, когда я звоню из React в Spring, чтобы получить Страницу пользователей, она возвращала только пользователей, которые находятся в том же обществе, что и человек, который сделал запрос.

До сих пор я пытался добавить society_id человека, который сделал звонок, в путь запроса,

в React,

 export const listUsers = (param = { page: 0, size: 9 }) => {
  const path = url   `/api/1.0/users/${id}?page=${param.page || 0}amp;size=${param.size || 9}amp;sort=username,asc`;
  return axios.get(path);
};
 

весной контроллер

 //Get page of members
    @CrossOrigin
    @GetMapping("/users/{id:[0-9] }")
    Page<UserVM> getUsers(Pageable page, long id) {
        return userService.getUsers(page, id).map(UserVM::new);
    }

//In userSerice

public Page<User> getUsers(Pageable pageable, long id) {

        return userRepository.findAllBySociety(pageable, id);
    }

//In userRepository

@Query(value = "select u from User u Where society_id=:id")
    Page<User> findAllUsers(Pageable page, long id);
 

Это дает ошибку, хотя, как я думаю, он пытается передать значение id как a Society , которое ему не нравится.

Может ли кто-нибудь помочь решить, как мне обойти это, или если будет лучший способ получить список User для общества, частью которого является вошедший в систему пользователь.

Ответ №1:

Предполагая, что у вашей Society сущности есть id свойство, должен работать следующий метод в вашем репозитории (соответствующий запрос будет сгенерирован Spring Data JPA):

 public Page<User> findAllBySocietyId(Pageable page, long id);
 

Тогда вам просто нужно позвонить в свою службу:

 public Page<User> getUsers(Pageable pageable, long id) {
    return userRepository.findAllBySocietyId(pageable, id);
}