数据是从h2数据库的data.sql脚本加载的。然后,我想让所有用户都拥有userRepository。我执行roleRepository.findAll(),但出现堆栈溢出错误。 我正在尝试注册并登录。但是,当我提交注册表格时,出现stackoverflow错误。我认为错误是在userRepository.findall()级别上,当数据库中有用户时,它会返回null。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public User save(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
ArrayList<Role> roles = new ArrayList<Role>();
roleRepository.findAll().forEach(role -> roles.add(role));
user.setRoles(roles);
return roleRepository.save(user);
}
}
java.lang.StackOverflowError:空
答案 0 :(得分:0)
@Override
public User save(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
ArrayList<Role> roles = new ArrayList<Role>();
roleRepository.findAll().forEach(role -> roles.add(role));
//可能是这里的错误,因为角色包含角色列表,并且您正在为一个用户设置角色。遍历角色或提取角色进行设置!
user.setRoles(roles);
return roleRepository.save(user);
}
答案 1 :(得分:0)
您在$associative_array = json_decode($json, true);
$indexed_array = array_values($associative_array);
和User
类之间有一个@OneToMany或@ManyToMany关系
因此,当您调用Role
时,它会返回一个角色列表,每个角色都有一个或多个用户,每个用户都有很多角色,依此类推,这会导致无限循环。
因此要解决此问题:您添加了另一个名为 dto 的层,这是一种避免堆栈溢出错误的设计模式。