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;
实体:
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;