[RESOLVIDO] Banco de dados relacional hibernate

Boa noite pessoal!
Como estou aprendendo um pouco de banco de dados relacional, decidi ver o suporte do hibernate para ele. Gostei pois uso o NetBeans então apenas digo quais são as tabelas e ele já gera o código com as colunas, índices, etc. Até aí tudo bem, mas estou com dúvida na hora de eu listar por exemplo os dados. Quando eu uso o criteria ele ja lista todos os dados das outras tabelas também mas como que faço para exibir? Se eu colocar um for que contém o objeto de uma classe diferente da que eu expecifiquei no criteria ele vai da erro de cast!

Olhem um código que tentei fazer:

Main:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Classes;

import Entidades.Comissao;
import Entidades.Grupoproduto;
import Entidades.Produto;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
/**
 *
 * @author Windows 7
 */
public class Main {
  public static void main(String[] args) {
    AnnotationConfiguration conf = new AnnotationConfiguration();
    conf.configure();
    SessionFactory factory = conf.buildSessionFactory();
    Session session = factory.openSession();
    
    List lista = session.createCriteria(Produto.class).list();
    
    for (Comissao comissao : (List<Comissao>) lista) {
      System.out.println(comissao.getPorcentagem());
    }
    
    System.out.println(lista);
    
    session.close();
  }
}

Entidades:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidades;

import java.io.Serializable;
import javax.persistence.Basic;
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.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Windows 7
 */
@Entity
@Table(name = "produto")
@XmlRootElement
@NamedQueries({
  @NamedQuery(name = "Produto.findAll", query = "SELECT p FROM Produto p"),
  @NamedQuery(name = "Produto.findByProdutoID", query = "SELECT p FROM Produto p WHERE p.produtoID = :produtoID"),
  @NamedQuery(name = "Produto.findByDescricao", query = "SELECT p FROM Produto p WHERE p.descricao = :descricao"),
  @NamedQuery(name = "Produto.findByUnidade", query = "SELECT p FROM Produto p WHERE p.unidade = :unidade"),
  @NamedQuery(name = "Produto.findByPrecoCusto", query = "SELECT p FROM Produto p WHERE p.precoCusto = :precoCusto"),
  @NamedQuery(name = "Produto.findByPrecoVenda", query = "SELECT p FROM Produto p WHERE p.precoVenda = :precoVenda"),
  @NamedQuery(name = "Produto.findBySaldoEstoque", query = "SELECT p FROM Produto p WHERE p.saldoEstoque = :saldoEstoque")})
public class Produto implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Basic(optional = false)
  @Column(name = "ProdutoID")
  private Integer produtoID;
  @Basic(optional = false)
  @Column(name = "Descricao")
  private String descricao;
  @Basic(optional = false)
  @Column(name = "Unidade")
  private String unidade;
  // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
  @Column(name = "PrecoCusto")
  private Float precoCusto;
  @Basic(optional = false)
  @Column(name = "PrecoVenda")
  private float precoVenda;
  @Column(name = "SaldoEstoque")
  private Float saldoEstoque;
  @JoinColumn(name = "GrupoID", referencedColumnName = "GrupoID")
  @ManyToOne(optional = false)
  private Grupoproduto grupoID;
  @JoinColumn(name = "ComissaoID", referencedColumnName = "ComissaoID")
  @ManyToOne(optional = false)
  private Comissao comissaoID;

  public Produto() {
  }

  public Produto(Integer produtoID) {
    this.produtoID = produtoID;
  }

  public Produto(Integer produtoID, String descricao, String unidade, float precoVenda) {
    this.produtoID = produtoID;
    this.descricao = descricao;
    this.unidade = unidade;
    this.precoVenda = precoVenda;
  }

  public Integer getProdutoID() {
    return produtoID;
  }

  public void setProdutoID(Integer produtoID) {
    this.produtoID = produtoID;
  }

  public String getDescricao() {
    return descricao;
  }

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

  public String getUnidade() {
    return unidade;
  }

  public void setUnidade(String unidade) {
    this.unidade = unidade;
  }

  public Float getPrecoCusto() {
    return precoCusto;
  }

  public void setPrecoCusto(Float precoCusto) {
    this.precoCusto = precoCusto;
  }

  public float getPrecoVenda() {
    return precoVenda;
  }

  public void setPrecoVenda(float precoVenda) {
    this.precoVenda = precoVenda;
  }

  public Float getSaldoEstoque() {
    return saldoEstoque;
  }

  public void setSaldoEstoque(Float saldoEstoque) {
    this.saldoEstoque = saldoEstoque;
  }

  public Grupoproduto getGrupoID() {
    return grupoID;
  }

  public void setGrupoID(Grupoproduto grupoID) {
    this.grupoID = grupoID;
  }

  public Comissao getComissaoID() {
    return comissaoID;
  }

  public void setComissaoID(Comissao comissaoID) {
    this.comissaoID = comissaoID;
  }

  @Override
  public int hashCode() {
    int hash = 0;
    hash += (produtoID != null ? produtoID.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 Produto)) {
      return false;
    }
    Produto other = (Produto) object;
    if ((this.produtoID == null && other.produtoID != null) || (this.produtoID != null && !this.produtoID.equals(other.produtoID))) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "Entidades.Produto[ produtoID=" + produtoID + " ]";
  }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidades;

import java.io.Serializable;
import java.util.Collection;
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.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Windows 7
 */
@Entity
@Table(name = "grupoproduto")
@XmlRootElement
@NamedQueries({
  @NamedQuery(name = "Grupoproduto.findAll", query = "SELECT g FROM Grupoproduto g"),
  @NamedQuery(name = "Grupoproduto.findByGrupoID", query = "SELECT g FROM Grupoproduto g WHERE g.grupoID = :grupoID"),
  @NamedQuery(name = "Grupoproduto.findByDescricao", query = "SELECT g FROM Grupoproduto g WHERE g.descricao = :descricao")})
public class Grupoproduto implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Basic(optional = false)
  @Column(name = "GrupoID")
  private Integer grupoID;
  @Basic(optional = false)
  @Column(name = "Descricao")
  private String descricao;
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "grupoID")
  private Collection<Produto> produtoCollection;

  public Grupoproduto() {
  }

  public Grupoproduto(Integer grupoID) {
    this.grupoID = grupoID;
  }

  public Grupoproduto(Integer grupoID, String descricao) {
    this.grupoID = grupoID;
    this.descricao = descricao;
  }

  public Integer getGrupoID() {
    return grupoID;
  }

  public void setGrupoID(Integer grupoID) {
    this.grupoID = grupoID;
  }

  public String getDescricao() {
    return descricao;
  }

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

  @XmlTransient
  public Collection<Produto> getProdutoCollection() {
    return produtoCollection;
  }

  public void setProdutoCollection(Collection<Produto> produtoCollection) {
    this.produtoCollection = produtoCollection;
  }

  @Override
  public int hashCode() {
    int hash = 0;
    hash += (grupoID != null ? grupoID.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 Grupoproduto)) {
      return false;
    }
    Grupoproduto other = (Grupoproduto) object;
    if ((this.grupoID == null && other.grupoID != null) || (this.grupoID != null && !this.grupoID.equals(other.grupoID))) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "Entidades.Grupoproduto[ grupoID=" + grupoID + " ]";
  }
  
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidades;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Windows 7
 */
@Entity
@Table(name = "comissao")
@XmlRootElement
@NamedQueries({
  @NamedQuery(name = "Comissao.findAll", query = "SELECT c FROM Comissao c"),
  @NamedQuery(name = "Comissao.findByComissaoID", query = "SELECT c FROM Comissao c WHERE c.comissaoID = :comissaoID"),
  @NamedQuery(name = "Comissao.findByPorcentagem", query = "SELECT c FROM Comissao c WHERE c.porcentagem = :porcentagem")})
public class Comissao implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @Basic(optional = false)
  @Column(name = "ComissaoID")
  private String comissaoID;
  // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
  @Column(name = "Porcentagem")
  private Float porcentagem;
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "comissaoID")
  private Collection<Produto> produtoCollection;

  public Comissao() {
  }

  public Comissao(String comissaoID) {
    this.comissaoID = comissaoID;
  }

  public String getComissaoID() {
    return comissaoID;
  }

  public void setComissaoID(String comissaoID) {
    this.comissaoID = comissaoID;
  }

  public Float getPorcentagem() {
    return porcentagem;
  }

  public void setPorcentagem(Float porcentagem) {
    this.porcentagem = porcentagem;
  }

  @XmlTransient
  public Collection<Produto> getProdutoCollection() {
    return produtoCollection;
  }

  public void setProdutoCollection(Collection<Produto> produtoCollection) {
    this.produtoCollection = produtoCollection;
  }

  @Override
  public int hashCode() {
    int hash = 0;
    hash += (comissaoID != null ? comissaoID.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 Comissao)) {
      return false;
    }
    Comissao other = (Comissao) object;
    if ((this.comissaoID == null && other.comissaoID != null) || (this.comissaoID != null && !this.comissaoID.equals(other.comissaoID))) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "Entidades.Comissao[ comissaoID=" + comissaoID + " ]";
  }
  
}

Essa é a saída:

run:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    select
        this_.ProdutoID as ProdutoID0_2_,
        this_.ComissaoID as ComissaoID0_2_,
        this_.Descricao as Descricao0_2_,
        this_.GrupoID as GrupoID0_2_,
        this_.PrecoCusto as PrecoCusto0_2_,
        this_.PrecoVenda as PrecoVenda0_2_,
        this_.SaldoEstoque as SaldoEst5_0_2_,
        this_.Unidade as Unidade0_2_,
        comissao2_.ComissaoID as ComissaoID2_0_,
        comissao2_.Porcentagem as Porcenta2_2_0_,
        grupoprodu3_.GrupoID as GrupoID1_1_,
        grupoprodu3_.Descricao as Descricao1_1_ 
    from
        produto this_ 
    inner join
        comissao comissao2_ 
            on this_.ComissaoID=comissao2_.ComissaoID 
    inner join
        grupoproduto grupoprodu3_ 
            on this_.GrupoID=grupoprodu3_.GrupoID
Exception in thread "main" java.lang.ClassCastException: Entidades.Produto cannot be cast to Entidades.Comissao
	at Classes.Main.main(Main.java:28)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

Obrigado!

[b]tenta assim nesse FOR abaixo:

for (Produto produto : lista) {
System.out.println(produto.Comissao.getPorcentagem());
}
[/b]

[quote=esdras_63]
List lista = session.createCriteria(Produto.class).list();

for (Comissao comissao : (List<Comissao>) lista) {
  System.out.println(comissao.getPorcentagem());
}

System.out.println(lista);

session.close();

}
}
[/code]

Kkk desculpem a minha ignorância! Devia ter prestado atenção no código da entidade! o meu comissaoID é do tipo Comissao então se eu der getComissaoID vem uma comissao para mim!! usahuahsuh olha o for

for (Produto produto :  lista) {
  System.out.println(produto.getComissaoID().getPorcentagem());
}

Obrigado a todos!
Desculpem!