Prezados,
Estou desenvolvendo um sistema e é a primeira vez que uso o hibernate. Estou com um problema e peço a ajuda de vocês.
A questão é a seguinte:
Tenho as tabelas USUARIO, GRUPO (n pra n) e a de relacionamento. O problema é quando eu atualizo (update) algum dado na tabela de USUARIO (login, por exemplo) e o hibernate executa um delete na tabela de relacionamento, apagando os grupos que o usuario pertencia.
Andei pesquisando aqui no forum e na documentação do hibernate alguma referencia sobre isso mas não encontrei nada.
Classe Usuario:
@Entity
@Table(name="usuario"
,catalog="saunt"
)
public class Usuario implements java.io.Serializable {
private int idPessoa;
private Pessoa pessoa;
private String login;
private String senha;
private Set<Movimento> movimentos = new HashSet<Movimento>(0);
private Set<Grupo> grupos = new HashSet<Grupo>(0);
public Usuario() {
}
public Usuario(int idPessoa, Pessoa pessoa) {
this.idPessoa = idPessoa;
this.pessoa = pessoa;
}
public Usuario(int idPessoa, Pessoa pessoa, String login, String senha, Set<Movimento> movimentos, Set<Grupo> grupos) {
this.idPessoa = idPessoa;
this.pessoa = pessoa;
this.login = login;
this.senha = senha;
this.movimentos = movimentos;
this.grupos = grupos;
}
@Id
@Column(name="id_pessoa", unique=true, nullable=false)
public int getIdPessoa() {
return this.idPessoa;
}
public void setIdPessoa(int idPessoa) {
this.idPessoa = idPessoa;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_pessoa", unique=true, nullable=false, insertable=false, updatable=false)
public Pessoa getPessoa() {
return this.pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
@Column(name="login", length=45)
public String getLogin() {
return this.login;
}
public void setLogin(String login) {
this.login = login;
}
@Column(name="senha", length=30)
public String getSenha() {
return this.senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="usuario")
public Set<Movimento> getMovimentos() {
return this.movimentos;
}
public void setMovimentos(Set<Movimento> movimentos) {
this.movimentos = movimentos;
}
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="grupo_usuario", catalog="saunt", joinColumns = {
@JoinColumn(name="id_usuario", nullable=false, updatable=false) }, inverseJoinColumns = {
@JoinColumn(name="id_grupo", nullable=false, updatable=false) })
@OrderBy("nome")
public Set<Grupo> getGrupos() {
return this.grupos;
}
public void setGrupos(Set<Grupo> grupos) {
this.grupos = grupos;
}
}
Classe Grupo:
@Entity
@Table(name="grupo"
,catalog="saunt"
)
public class Grupo implements java.io.Serializable {
private Integer id;
private String nome;
private String descricao;
private Set<Transacao> transacaos = new HashSet<Transacao>(0);
private Set<Usuario> usuarios = new HashSet<Usuario>(0);
public Grupo() {
}
public Grupo(String nome, String descricao, Set<Transacao> transacaos, Set<Usuario> usuarios) {
this.nome = nome;
this.descricao = descricao;
this.transacaos = transacaos;
this.usuarios = usuarios;
}
@Id @GeneratedValue(strategy=IDENTITY)
@Column(name="id", unique=true, nullable=false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="nome", length=45)
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name="descricao")
public String getDescricao() {
return this.descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="grupo_transacao", catalog="saunt", joinColumns = {
@JoinColumn(name="id_grupo", nullable=false, updatable=false) }, inverseJoinColumns = {
@JoinColumn(name="id_transacao", nullable=false, updatable=false) })
@OrderBy("nome")
public Set<Transacao> getTransacaos() {
return this.transacaos;
}
public void setTransacaos(Set<Transacao> transacaos) {
this.transacaos = transacaos;
}
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="grupo_usuario", catalog="saunt", joinColumns = {
@JoinColumn(name="id_grupo", nullable=false, updatable=false) }, inverseJoinColumns = {
@JoinColumn(name="id_usuario", nullable=false, updatable=false) })
public Set<Usuario> getUsuarios() {
return this.usuarios;
}
public void setUsuarios(Set<Usuario> usuarios) {
this.usuarios = usuarios;
}
}
Sempre que atualizo algum registro (via código) no USUARIO o hibernate joga essa sql
delete
from
saunt.grupo_usuario
where
id_usuario=?
Gostaria, se possível, saber a causa disso e uma solução.
Obrigado.