Olá!
Estou com um problema. Quanto eu tento fazer a atualização do usuário no banco de dados, tenho entradas duplicadas de suas roles.
public void atualizar(Usuario usuario, ArrayList<Role> roles) {
manager.merge(usuario);
usuario.setRoles(roles);
}
estou recebendo as roles no UsuárioController através da tabela de usuários que está mapeada para /usuarios e tento atualizar com o seguinte método
@RequestMapping(value = "/atualizar" , method = RequestMethod.POST)
public ModelAndView atualizar(String email, @RequestParam ArrayList<Role> roles,
RedirectAttributes redirectAttributes) {
Usuario usuario = usuarioDao.loadUserByUsername(email);
usuarioDao.atualizar(usuario, roles);
String sucesso = "Permissões alteradas com sucesso!";
redirectAttributes.addFlashAttribute("sucesso", sucesso);
return new ModelAndView("redirect:/usuarios");
}
Já chequei e estou recebendo a string corretamente, o hibernate que está duplicando a entrada. Para resolver esse problema já tentei:
- atualizar o hibernate. Encontrei no SO que a versão 5.0.8 já tinha resolvido isso
- usar set ao invés de list nos roles, para evitar a duplicação (me causou erro justamente pela tentativa de duplicar)
- limpar a lista de roles e inserir novos roles que são os passados ao clicar em atualizar na página (apesar de realmente limpar, o hibernate simplesmente mantinha a cópia do que já tinha lá e "concatenava" (por falta de palavra melhor no momento) os valores novos.
public void limpaRoles() {
this.roles.clear();
}
nada funcionou e estou aqui sem ter muita noção do que fazer para resolver isso. Tentei aplicar cascades também, que apesar de não entender muito bem o que é isso (no curso de Spring ficou bem abstrato), parecia ajudar na solução em algumas sugestões no SO, mas não adiantou também.
Alguém poderia me ajudar a encontrar um caminho pra isso?