Как загрузить модель сущности аутентифицированных пользователей из Spring Data JPA, используя безопасность Spring для использования в других репозиториях JPA? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть UserEntity модель и соответствующая UserRepository. Аналогично у меня есть BookEntity модель и BookRepository. Book имеет отношение @ManyToOne с пользователем.

Таким образом, в сущности Book есть поле, которое отображается на идентификатор сущности пользователя как FK с использованием аннотации @ManyToOne. Когда я хочу получить список книг, основанных на пользователе, я вызываю метод List<BookEntity> findByUser(UserEntity user); из BookRepository, используя Spring Data JPA.

Я могу загрузить текущего аутентифицированного пользователя с помощью безопасности Spring, но это дает мне UserDetails объект. Мне нужен UserEntity объект, чтобы я мог передать его BookRepository методам.

Прямо сейчас, то, что я делаю, вызывает Optional<UserEntity> findByUsername(String username); из UserRepository, чтобы получить UserEntity и сделать это Я получаю имя пользователя из UserDetails экземпляра, предоставленного службой безопасности Spring. А затем передать эту UserEntity модель в BookRepository методы.

Я хочу знать, является ли это правильным способом загрузки UserEntity модели для перехода в BookRepository или есть какой-либо другой способ сделать это ? Если нет, я неправильно отображаю Книги для Пользователя?

Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 21 апреля 2020

В вашем BookRepository выполните что-то вроде

@Query("FROM Book b where b.user.userName = :userName")
List<Book> findBooksForUser(@Param("userName") String userName);

Вы можете получить текущее имя пользователя в контроллере, например

@RequestMapping(value = "/books", method = RequestMethod.GET)
@ResponseBody
public String getBooks(Authentication authentication) {
  if(authentication != null){
    //Call bookRepo.findBooksForUser(authentication.getName())
  }

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