Galera Boa tarde, estou tentando remover um registro de um relacionamento @ManyToMany (remover os usuários selecionados) porém estou tomando essa exception
(org.hibernate.exception.ConstraintViolationException: could not execute statement).
Basicamente eu sei porque isso acontece mas, não estou conseguindo resolver.
Repository Usuarios:
public class Usuarios implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public Usuario porId(Long id) {
return manager.createQuery("from Usuario u join fetch u.grupos where u.id=:id", Usuario.class)
.setParameter("id", id).getSingleResult();
}
@Transactional
public void remover(Usuario usuario) {
try {
usuario = porId(usuario.getId());
manager.remove(usuario);
} catch (PersistenceException e) {
throw new NegocioException("Usuário não pode ser excluído.");
}
}
}
Model Usuario
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String nome;
private String email;
private String senha;
private String telefone;
private List<Grupo> grupos = new ArrayList<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(nullable = false, length = 80)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(nullable = false, unique = false, length = 50)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(nullable = false, length = 60)
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@Column(nullable = false, length = 50)
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "usuario_grupo", joinColumns = @JoinColumn(name = "usuario_id"), inverseJoinColumns = @JoinColumn(name = "grupo_id"))
public List<Grupo> getGrupos() {
return grupos;
}
public void setGrupos(List<Grupo> grupos) {
this.grupos = grupos;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Usuario other = (Usuario) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Usuario [\nid=" + id + ",\nnome=" + nome + ",\nemail=" + email + ",\nsenha=" + senha + ",\ntelefone="
+ telefone + ",\ngrupos" + grupos + "]";
}
}
Bean
@Named
@ViewScoped
public class PesquisaUsuarioBean implements Serializable{
private static final long serialVersionUID = 1L;
private List<Usuario> todosUsuarios;
private List<Usuario> usuariosSelecionados;
@Inject private Usuarios usuarios;
public PesquisaUsuarioBean() {
this.todosUsuarios = new ArrayList<>();
this.usuariosSelecionados = new ArrayList<>();
}
public void carregaUsuarios() {
this.todosUsuarios = this.usuarios.todos();
}
public void removerUsuariosSelecionados() {
for(Usuario usuario : this.usuariosSelecionados) {
this.usuarios.remover(usuario);
}
}
public List<Usuario> getTodosUsuarios() {
return todosUsuarios;
}
public List<Usuario> getUsuariosSelecionados() {
return usuariosSelecionados;
}
public void setUsuariosSelecionados(List<Usuario> usuariosSelecionados) {
this.usuariosSelecionados = usuariosSelecionados;
}
}