Estou com uma dúvida fiz o relacionamento entre essas duas tabelas abaixo:
Usuario:
package br.com.controle.usuairo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.NaturalId;
import br.com.controle.demanda.Demanda;
@Entity
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
private String nome;
private String email;
@NaturalId
private String login;
private String senha;
private Date nascimento;
private String idioma;
private boolean ativo;
private String celular;
@ElementCollection(targetClass=String.class)
@JoinTable(name="usuario_permissao",
uniqueConstraints={@UniqueConstraint(columnNames={"usuario","permissao"})},
joinColumns=@JoinColumn(name="usuario"))
@Column(name="permissao",length=50)
private List<String> permissao = new ArrayList<>();
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name="usuario_demanda",joinColumns=@JoinColumn(name="usuario_id"),inverseJoinColumns=@JoinColumn(name="demanda_id"))
private List<Demanda> demandas;
public List<String> getPermissao() {
return permissao;
}
public void setPermissao(List<String> permissao) {
this.permissao = permissao;
}
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Date getNascimento() {
return nascimento;
}
public void setNascimento(Date nascimento) {
this.nascimento = nascimento;
}
public String getIdioma() {
return idioma;
}
public void setIdioma(String idioma) {
this.idioma = idioma;
}
public boolean isAtivo() {
return ativo;
}
public void setAtivo(boolean ativo) {
this.ativo = ativo;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (ativo ? 1231 : 1237);
result = prime * result + ((celular == null) ? 0 : celular.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((idioma == null) ? 0 : idioma.hashCode());
result = prime * result + ((login == null) ? 0 : login.hashCode());
result = prime * result
+ ((nascimento == null) ? 0 : nascimento.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result
+ ((permissao == null) ? 0 : permissao.hashCode());
result = prime * result + ((senha == null) ? 0 : senha.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 (ativo != other.ativo)
return false;
if (celular == null) {
if (other.celular != null)
return false;
} else if (!celular.equals(other.celular))
return false;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (idioma == null) {
if (other.idioma != null)
return false;
} else if (!idioma.equals(other.idioma))
return false;
if (login == null) {
if (other.login != null)
return false;
} else if (!login.equals(other.login))
return false;
if (nascimento == null) {
if (other.nascimento != null)
return false;
} else if (!nascimento.equals(other.nascimento))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (permissao == null) {
if (other.permissao != null)
return false;
} else if (!permissao.equals(other.permissao))
return false;
if (senha == null) {
if (other.senha != null)
return false;
} else if (!senha.equals(other.senha))
return false;
return true;
}
}
e a classe Demanda abaixo:
package br.com.controle.demanda;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import br.com.controle.usuairo.Usuario;
@Entity
public class Demanda implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
private String nomeDemanda;
@Temporal(TemporalType.DATE)
private Date dataCriacao;
@Temporal(TemporalType.TIME)
private Date horaCriacao;
private String descricaoDemanda;
@ManyToMany(mappedBy="demandas",cascade={CascadeType.PERSIST,CascadeType.MERGE})
private List<Usuario> usuarios;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNomeDemanda() {
return nomeDemanda;
}
public void setNomeDemanda(String nomeDemanda) {
this.nomeDemanda = nomeDemanda;
}
public Date getDataCriacao() {
return dataCriacao;
}
public void setDataCriacao(Date dataCriacao) {
this.dataCriacao = dataCriacao;
}
public Date getHoraCriacao() {
return horaCriacao;
}
public void setHoraCriacao(Date horaCriacao) {
this.horaCriacao = horaCriacao;
}
public String getDescricaoDemanda() {
return descricaoDemanda;
}
public void setDescricaoDemanda(String descricaoDemanda) {
this.descricaoDemanda = descricaoDemanda;
}
public List<Usuario> getUsuarios() {
return usuarios;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((dataCriacao == null) ? 0 : dataCriacao.hashCode());
result = prime
* result
+ ((descricaoDemanda == null) ? 0 : descricaoDemanda.hashCode());
result = prime * result
+ ((horaCriacao == null) ? 0 : horaCriacao.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result
+ ((nomeDemanda == null) ? 0 : nomeDemanda.hashCode());
result = prime * result
+ ((usuarios == null) ? 0 : usuarios.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;
Demanda other = (Demanda) obj;
if (dataCriacao == null) {
if (other.dataCriacao != null)
return false;
} else if (!dataCriacao.equals(other.dataCriacao))
return false;
if (descricaoDemanda == null) {
if (other.descricaoDemanda != null)
return false;
} else if (!descricaoDemanda.equals(other.descricaoDemanda))
return false;
if (horaCriacao == null) {
if (other.horaCriacao != null)
return false;
} else if (!horaCriacao.equals(other.horaCriacao))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (nomeDemanda == null) {
if (other.nomeDemanda != null)
return false;
} else if (!nomeDemanda.equals(other.nomeDemanda))
return false;
if (usuarios == null) {
if (other.usuarios != null)
return false;
} else if (!usuarios.equals(other.usuarios))
return false;
return true;
}
}
Essas duas classes estão criando uma tabela chamada usuario_demanda, mas não consigo inseri quando vou inseri qualquer dado ele insere normal na tabela de Usuario e na tabela Demanda na de relacionamento nada. Segue abaixo também o codigo da DAO
UsuarioDAOHibernate
package br.com.controle.usuairo;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class UsuarioDAOHibernate implements UsuarioDAO {
private Session session;
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
@Override
public void salvar(Usuario usuario) {
this.session.save(usuario);
}
@Override
public void atualizar(Usuario usuario) {
if(usuario.getPermissao()==null || usuario.getPermissao().size() ==0){
Usuario usuarioPermissao = this.selecionar(usuario.getId());
usuario.setPermissao(usuarioPermissao.getPermissao());
this.session.evict(usuarioPermissao);
}
this.session.update(usuario);
}
@Override
public void excluir(Usuario usuario) {
this.session.delete(usuario);
}
@Override
public Usuario selecionar(Integer codigo) {
return (Usuario) this.session.get(Usuario.class, codigo);
}
@Override
public Usuario buscaPorLogin(String login) {
String hql = "select u from Usuario u where u.login=:login";
Query consulta = this.session.createQuery(hql);
consulta.setString("login", login);
return (Usuario) consulta.uniqueResult();
}
@Override
public List<Usuario> listar() {
return this.session.createCriteria(Usuario.class).list();
}
}
DemandaDAOHibernate
package br.com.controle.demanda;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class DemandaDAOHibernate implements DemandaDAO {
private Session session;
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
@Override
public void salvar(Demanda demanda) {
this.session.save(demanda);
}
@Override
public void atualiar(Demanda demanda) {
this.session.update(demanda);
}
@Override
public void excluir(Demanda demanda) {
this.session.delete(demanda);
}
@Override
public Demanda selecionar(Integer id) {
return (Demanda) this.session.get(Demanda.class, id);
}
@Override
public Demanda buscarNome(String nome) {
String hql = "select d from Demanda d where d.nomeDemanda=:nome;";
Query consulta = this.session.createQuery(hql);
consulta.setString("nome", nome);
return (Demanda) consulta.uniqueResult();
}
@Override
public List<Demanda> listar() {
return this.session.createCriteria(Demanda.class).list();
}
}
Se alguém souber o erro porque não está inserindo nessa tabela de relacionamento eu agradeço.