#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);
}