Hibernate tabela relacionada fica em branco

0 respostas
llucas

Olá
Eu estava fazendo uma aplicação com o hibenate e ao usar um relacionamento manyToMany tive um problema.
No meu banco de dados eu tenho a tabela 'usuario' e a tabela 'permissao' e ligando essas duas eu tenho a tabela 'usuario_permissao'. (Formando um relacionamento N:N)

Eu testei salvar pelo hibernate 3 usuarios com 3 permissões diferentes, quando fui ver no banco as tabelas 'usuario' e 'permissao' haviam sido preenchidas com os dados normalmente mas a tabela relacionada 'usuario_permissao' estava sem nada.

Depois eu testei imprimir todos os usuários com suas permissões pela aplicação pegando os dados através do hibernate e a aplicação imprimiu todos os usuarios com suas devidas permissões corretamente mesmo a tabela relacionada 'usuario_permissao' não estando preenchida.

O problema é que se eu usar o comando SQL ("SELECT u.login, p.descricao FROM usuario u, usuario_permissao up, permissao p WHERE u.id = up.usuario AND p.id = up.permissao") ele não vai retornar a consulta que eu queor por que as tabelas estão em branco.

Eu queria que alguem me dissesse se eu fiz alguma anotação do hibernate errada ou alguma outra coisa pra me ajudar
Grato =D

GeraBanco.java
package aplicacao;

import modelo.Permissao;
import modelo.Usuario;
import java.util.ArrayList;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraBanco {

    private static void geraExemplos() {
        new Permissao("ROLE_ADMINISTRADOR").salvarAtualizar();
        new Permissao("ROLE_VENDEDOR").salvarAtualizar();
        new Permissao("ROLE_CLIENTE").salvarAtualizar();

        ArrayList<Permissao> permissoes = new ArrayList<Permissao>();
        permissoes.add(Permissao.getDao().buscar(1));
        new Usuario("admin", "admin", true, permissoes).salvarAtualizar();

        permissoes = new ArrayList<Permissao>();
        permissoes.add(Permissao.getDao().buscar(2));
        new Usuario("vendedor", "vendedor", true, permissoes).salvarAtualizar();
        
        permissoes = new ArrayList<Permissao>();
        permissoes.add(Permissao.getDao().buscar(3));
        new Usuario("cliente", "cliente", true, permissoes).salvarAtualizar();
    }

    private static void geraBanco() {
        Configuration cfg = new AnnotationConfiguration();
        cfg.configure();

        SchemaExport se = new SchemaExport(cfg);
        se.create(true, true);
    }

    public static void main(String args[]) {
        geraBanco();
        geraExemplos();
    }
}
Usuario.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import dao.Dao;
import dao.Dao;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Lucas
 */
@Entity
@Table(name = "usuario")
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findById", query = "SELECT u FROM Usuario u WHERE u.id = :id"),
    @NamedQuery(name = "Usuario.findByLogin", query = "SELECT u FROM Usuario u WHERE u.login = :login"),
    @NamedQuery(name = "Usuario.findBySenha", query = "SELECT u FROM Usuario u WHERE u.senha = :senha"),
    @NamedQuery(name = "Usuario.findByAtivo", query = "SELECT u FROM Usuario u WHERE u.ativo = :ativo")})
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;
    @Basic(optional = false)
    @Column(name = "login", nullable = false, length = 100)
    private String login;
    @Basic(optional = false)
    @Column(name = "senha", nullable = false, length = 100)
    private String senha;
    @Basic(optional = false)
    @Column(name = "ativo", nullable = false)
    private boolean ativo;
    @ManyToMany(mappedBy = "usuarioList", cascade=CascadeType.ALL)
    private List<Permissao> permissaoList;

    public Usuario() {
    }

    public Usuario(Integer id) {
        this.id = id;
    }

    public Usuario(String login, String senha, boolean ativo, List<Permissao> permissaoList) {
        this.login = login;
        this.senha = senha;
        this.ativo = ativo;
        this.permissaoList = permissaoList;
    }

    public Usuario(Integer id, String login, String senha, boolean ativo) {
        this.id = id;
        this.login = login;
        this.senha = senha;
        this.ativo = ativo;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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 boolean getAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public List<Permissao> getPermissaoList() {
        return permissaoList;
    }

    public void setPermissaoList(List<Permissao> permissaoList) {
        this.permissaoList = permissaoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "modelo.Usuario[id=" + id + "]";
    }

    public static Dao<Usuario> getDao()
    {
        return new Dao<Usuario>(Usuario.class);
    }

    public void salvarAtualizar()
    {
        getDao().salvarAtualizar(this);
    }

    public void excluir()
    {
        getDao().excluir(this);
    }

}
Permissao.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import dao.Dao;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Lucas
 */
@Entity
@Table(name = "permissao")
@NamedQueries({
    @NamedQuery(name = "Permissao.findAll", query = "SELECT p FROM Permissao p"),
    @NamedQuery(name = "Permissao.findById", query = "SELECT p FROM Permissao p WHERE p.id = :id"),
    @NamedQuery(name = "Permissao.findByDescricao", query = "SELECT p FROM Permissao p WHERE p.descricao = :descricao")})
public class Permissao implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;
    @Basic(optional = false)
    @Column(name = "descricao", nullable = false, length = 100)
    private String descricao;
    @JoinTable(name = "usuario_permissao", joinColumns = {
        @JoinColumn(name = "permissao", referencedColumnName = "id", nullable = false)}, inverseJoinColumns = {
        @JoinColumn(name = "usuario", referencedColumnName = "id", nullable = false)})
    @ManyToMany(cascade=CascadeType.ALL)
    private List<Usuario> usuarioList;

    public Permissao() {
    }

    public Permissao(Integer id) {
        this.id = id;
    }

    public Permissao(String descricao) {
        this.descricao = descricao;
    }

    public Permissao(Integer id, String descricao) {
        this.id = id;
        this.descricao = descricao;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<Usuario> getUsuarioList() {
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Permissao)) {
            return false;
        }
        Permissao other = (Permissao) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "modelo.Permissao[id=" + id + "]";
    }

    public static Dao<Permissao> getDao()
    {
        return new Dao<Permissao>(Permissao.class);
    }

    public void salvarAtualizar()
    {
        getDao().salvarAtualizar(this);
    }

    public void excluir()
    {
        getDao().excluir(this);
    }

}
Criado 22 de abril de 2011
Respostas 0
Participantes 1