我有一个UserEntity
模型和相应的UserRepository.
类似地,我有BookEntity
模型和BookRepository
。图书与用户具有@ManyToOne
关系。
因此,在Book实体中,存在一个使用@ManyToOne
注释映射为FK的用户实体的ID的字段。当我想基于用户检索书籍列表时,我使用Spring Data JPA从List<BookEntity> findByUser(UserEntity user);
调用方法BookRepository
。
我可以在Spring安全性的帮助下加载当前经过身份验证的用户,但这为我提供了一个UserDetails
对象。我需要的是UserEntity
对象,以便可以将其传递给BookRepository
方法。
现在,正在做的是从Optional<UserEntity> findByUsername(String username);
调用UserRepository
来获取UserEntity
,为此,我从Spring安全提供的UserDetails
实例中获取用户名。然后将此UserEntity
模型传递给BookRepository
方法。
我想知道这是加载UserEntity
模型以传递到BookRepository
的正确方法还是有其他方法?如果不是,我是否将Book正确地映射到User?
任何帮助将不胜感激。
解决方案如下:
在您的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())
}
....
}