Spring 数据Jpa多对多查询

Spring Data Jpa Many to Many Query

实体:

 Class User{
    private String id;
    @ManyToMany
    private List<Role> roles;
 }

 Class Role{
   private String id;
   @ManyToMany(mappedBy = "roles")
   private List<User> users; 

 }

用户存储库:

 public interface UserRepository extends PagingAndSortingRepository<User, Serializable>{

    @Query(" ??? ")

    public User getUser(String id);


}





 public class InMemorySecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired
private UserRepository userRepository;


@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth
            .userDetailsService(username -> { 
                com.casnetvi.cloud.domain.login.User employee = userRepository.findByEmail(username); 
                if (employee == null) {
                    throw new BadCredentialsException("User not found"); 
                }

                List<Role> roles1 = employee.getRoles();

                System.out.println(roles1);

出现打印异常:

未能延迟初始化角色集合:com.casnetvi.cloud.domain.login.User.roles,无法初始化代理 - 无会话

想知道是什么角色(使用getRoles()方法获取Role对象),@Query怎么写 (不是@Transactional,)

manyToMany 的默认获取类型是 Lazy。 因此,为了获得角色列表,您需要执行以下两项操作之一: 1. 在事务中执行配置方法。 2.设置与EAGER fetch类型的关系:

@ManyToMany(fetch=FetchType.EAGER)
private List<Role> roles;