Jsp selectItem x Hibernate Query

2 respostas
J

Bom dia!!

Tenho uma classe produto filha em 1-n da classe categoria. A categoria consegui gravar normalmente, agora para gravar o produto, para faze-lo preciso selecionar uma categoria que quero trazer na jsp por uma combobox, o cod_cat é fk em produto. Estou postando o código dos pojos, categoria e produto, dos dao categoria e produto e do trecho do código jsp onde chamo a combobox.

Esta dando o erro

org.apache.jasper.JasperException: javax.servlet.jsp.JspException: javax.faces.el.EvaluationException: Error getting property 'prod_cat' from bean of type beans.ProdutoFacade: java.lang.ClassCastException: beans.Categoria

as Classes

Produto 

package beans; 

import java.sql.Blob; 
import java.util.ArrayList; 
import java.util.Collection; 

public class Produto { 
    private int cod_prod; 
    
    private String descricao; 
    
    private int qtde_est_min; 
    
    private int qtde_est_max; 
    
    private float valor_custo; 
    
    private float valor_revenda; 
    
    private Blob imagem; 
    
    private Collection<Categoria> prod_cat; 
    
    private ArrayList item_pedido = new ArrayList(); 
    
    public Produto() { 
    } 
    
    public int getCod_prod() { 
        return cod_prod; 
    } 
    
    public void setCod_prod(int val) { 
        this.cod_prod = val; 
    } 
    
    public String getDescricao() { 
        return descricao; 
    } 
    
    public void setDescricao(String val) { 
        this.descricao = val; 
    } 
    
    public int getQtde_est_min() { 
        return qtde_est_min; 
    } 
    
    public void setQtde_est_min(int val) { 
        this.qtde_est_min = val; 
    } 
    
    public float getQtde_est_max() { 
        return qtde_est_max; 
    } 
    
    public void setQtde_est_max(int val) { 
        this.qtde_est_max = val; 
    } 
    
    public float getValor_custo() { 
        return valor_custo; 
    } 
    
    public void setValor_custo(float val) { 
        this.valor_custo = val; 
    } 
    
    public float getValor_revenda() { 
        return valor_revenda; 
    } 
    
    public void setValor_revenda(float val) { 
        this.valor_revenda = val; 
    } 
    
    public Blob getImagem() { 
        return imagem; 
    } 
    
    public void setImagem(Blob val) { 
        this.imagem = val; 
    } 
    
    
    
    public ArrayList getItem_pedido() { 
        return item_pedido; 
    } 
    
    public void setItem_pedido(ArrayList item_pedido) { 
        this.item_pedido = item_pedido; 
    } 

    public Collection<Categoria> getProd_cat() { 
        return prod_cat; 
    } 

    public void setProd_cat(Collection<Categoria> prod_cat) { 
        this.prod_cat = prod_cat; 
    } 
} 

PRODUTO FACADE 

package beans; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator; 
import java.util.List; 
import javax.faces.application.FacesMessage; 
import javax.faces.context.ExternalContext; 
import javax.faces.context.FacesContext; 
import javax.faces.model.SelectItem; 
import javax.servlet.http.HttpServletRequest; 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import util.HibernateUtil; 

/** 
 *  @netbeans.hibernate.facade beanClass=beanslocadora.Carro 
 */ 
public class ProdutoFacade { 
    private Produto produto; 
    private Collection<Categoria> prod_cat; 
    Session session; 
    
    
    public void saveProduto(Produto produto) { 
        try{ 
            HibernateUtil.beginTransaction(); 
            Session session = HibernateUtil.currentSession(); 
            session.save(produto); 
            HibernateUtil.commitTransaction(); 
            addMessage("Insert Produto Ok."); 
        }catch(Exception e){ 
            addMessage("Erro insert Produto!"); 
        }finally{HibernateUtil.closeSession();} 
    } 
    
    public Produto getProduto() { 
        return produto; 
    } 
    
    public void setProduto(Produto produto) { 
        this.produto = produto; 
    } 
    
    public String criaProduto(){ 
        if(this.getProduto()==null){ 
            addMessage("Produto Nulo!"); 
            return "produto_criar"; 
        }else{ 
            this.saveProduto(this.getProduto()); 
            return "produto_criado"; 
        } 
    } 
    public ProdutoFacade(){} 
    
    public String createSetup() { 
        this.setProduto(new Produto()); 
        return "produto_criar"; 
    } 
    
    public Produto findByDescricao(String descricao) { 
        Session session = HibernateUtil.currentSession(); 
        String query1 ="from produto pf where pd.descricao = :descricao"; 
        org.hibernate.Query query = session.createQuery(query1).setString("descricao", descricao).setMaxResults(1); 
        return (Produto) query.uniqueResult(); 
    } 
    
    public List getProdutos() { 
        HibernateUtil.beginTransaction(); 
        Session session = HibernateUtil.currentSession(); 
        org.hibernate.Query query = session.createQuery( 
        "select object(o) from Produto o"); 
        List list= query.list(); 
        HibernateUtil.commitTransaction(); 
        HibernateUtil.closeSession(); 
        return list; 
    } 
    
    public String destroy() { 
        
        HibernateUtil.beginTransaction(); 
        Session session = HibernateUtil.currentSession(); 
        try{ 
            produto = getProdutoFromRequestParam(); 
            session.delete(produto); 
            HibernateUtil.commitTransaction(); 
            addMessage("Delete Produto Ok."); 
        } catch (Exception ex) { 
            try { 
                addMessage("Erro excluir Produto"); 
            } catch (Exception e) {System.out.println("erro em destroy");} 
        } finally{HibernateUtil.closeSession();} 
        return "produto_list"; 
    } 
    
    public Produto getProdutoFromRequestParam() { 
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
        HttpServletRequest request = (HttpServletRequest)ec.getRequest(); 
        String descricao = request.getParameter("descricao"); 
        return this.findByDescricao(descricao); 
        
    } 
    
    public static void addMessage(String msg) { 
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg); 
        FacesContext fc = FacesContext.getCurrentInstance(); 
        fc.addMessage(null, facesMsg); 
    } 
    
    
    public String editSetup() { 
        setProdutoFromRequestParam(); 
        return "produto_edit"; 
    } 
    
    
    public void setProdutoFromRequestParam() { 
        Produto produto = getProdutoFromRequestParam(); 
        this.setProduto(produto); 
    } 
    
    
    public String edit() { 
        HibernateUtil.beginTransaction(); 
        Session session = HibernateUtil.currentSession(); 
        try{ 
            session.merge(produto); 
            HibernateUtil.commitTransaction(); 
            addMessage("Atualizacao Produto Ok."); 
        } catch (Exception ex) { 
            try { 
                System.out.println("Erro Atualizacao Produto"); 
                addMessage("Erro ao atualizar Produto"); 
            } catch (Exception e) {System.out.println("Edicao Produto");} 
        } finally{ HibernateUtil.closeSession(); } 
        return "produto_list"; 
    } 

    // Collection com Conversor 
    
    public Collection<Categoria> getProd_cat() throws HibernateException { 
        HibernateUtil.beginTransaction(); 
        Session session = HibernateUtil.currentSession(); 
        org.hibernate.Query query = session.createQuery( 
        "select object(o) from Categoria o"); 
        List prod_cat= query.list(); 
        Iterator objetos = prod_cat.iterator(); 
        //prod_cat = new ArrayList(); 
        for (int i = 0; i < prod_cat.size(); i++) { 
            Object[] tuple = (Object[])objetos.next(); 
            Categoria categoria= new Categoria(); 
         //     categoria.setProd_cat((Integer)tuple[0]); 
            categoria.setDescricao((String)tuple[1]); 
            prod_cat.add(categoria); 
        } 
        
        //persistente no banco de dados 
         HibernateUtil.commitTransaction(); 
         HibernateUtil.closeSession(); 

        return prod_cat; 
    } 

// ArrayList 
    /*public ArrayList<SelectItem> getListaCategorias() throws Throwable { 
        ArrayList<SelectItem> vlCat = new ArrayList(); 
        try { 
            if (prod_cat == null) 
                for (int i = 0; i< prod_cat.length;i++) 
                    vlCat.add(new SelectItem(String.valueOf(prod_cat[i].getCod_cat()), prod_cat[i].getDescricao())); 
        } catch (Throwable t) { 
            t.printStackTrace(); 
            throw t; 
        } 
        return vlCat; 
    }*/ 

    public void setProd_cat(Collection<Categoria> prod_cat) { 
        this.prod_cat = prod_cat; 
    } 
} 


CATEGORIA 

package beans; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

public class Categoria { 
    private int cod_cat; 

    private String descricao; 

   private Collection<Produto> prod_cat; 
    
    private Set cat_prod = new HashSet();    
    
    
    public Categoria() { 
    } 

    public int getCod_cat() { 
        return cod_cat; 
    } 

    public void setCod_cat(int val) { 
        this.cod_cat = val; 
    } 

    public String getDescricao() { 
        return descricao; 
    } 

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

    public void setCat_prod(ArrayList cat_prod) { 
        this.setCat_prod(cat_prod); 
    } 

    public void setCat_prod(Set cat_prod) { 
        this.cat_prod = cat_prod; 
    } 

    public Set getCat_prod() { 
        return cat_prod; 
    } 

    public Collection<Produto> getProd_cat() { 
        return prod_cat; 
    } 

    public void setProd_cat(Collection<Produto> prod_cat) { 
        this.prod_cat = prod_cat; 
    } 
} 

CATEGORIA FACADE 

package beans; 

import java.util.List; 
import javax.faces.application.FacesMessage; 
import javax.faces.context.ExternalContext; 
import javax.faces.context.FacesContext; 
import javax.servlet.http.HttpServletRequest; 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
import util.HibernateUtil; 


public class CategoriaFacade { 
    private Categoria categoria; 
    Session session; 
    
    public void saveCategoria(Categoria categoria) { 
        try{ 
         HibernateUtil.beginTransaction(); 
         Session session = HibernateUtil.currentSession(); 
         session.save(categoria); 
         HibernateUtil.commitTransaction(); 
         addMessage("Categoria salva com sucesso."); 
        }catch(HibernateException e1){ 
         throw e1; 
         //addMessage("Erro ao cadastrar categoria!"); 
        }finally{HibernateUtil.closeSession();} 
    } 
    
    public String criaCategoria(Categoria categoria){ 
      if (this.findByDescricao(categoria.getDescricao())==null) 
      {this.saveCategoria(categoria); 
         return "categoria_criada"; 
      }else  { 
          addMessage("Categoria ja existente!"); 
          return "categoria_criar"; 
      } 
    } 
    
    // Usando o atributo categoria 
    public String criaCategoria(){ 
    if (this.findByDescricao(categoria.getDescricao())==null) 
    {this.saveCategoria(this.getCategoria()); 
     return "categoria_criada"; 
    }else  { 
          addMessage("Categoria ja existente!"); 
          return "categoria_criar"; 
      } 
    } 
    
    public CategoriaFacade(){} 

    public Categoria getCategoria() { 
        return categoria; 
    } 

    public void setCategoria(Categoria categoria) { 
        this.categoria = categoria; 
    } 
    
  public String createSetup() { 
        this.setCategoria(new Categoria()); 
        return "categoria_criar"; 
    } 
  
  public Categoria findByDescricao(String descricao) { 
      try{ 
        Session session = HibernateUtil.currentSession();  
        String query1 ="from Categoria c where c.descricao = :descricao"; 
        org.hibernate.Query query = session.createQuery(query1).setString("descricao", descricao).setMaxResults(1); 
        Categoria categoria =(Categoria) query.uniqueResult(); 
         return categoria; 
      }catch(HibernateException e) 
      { //addMessage("Erro ao localizar categoria Aqui!"); 
        throw e; 
        //return null; 
                          } 
    } 

  
   public List getCategorias() { 
       try{ 
          HibernateUtil.beginTransaction(); 
          Session session = HibernateUtil.currentSession(); 
          org.hibernate.Query query = session.createQuery( 
          "select object(o) from Categoria as o"); 
          List list= query.list(); 
          HibernateUtil.commitTransaction(); 
          HibernateUtil.closeSession(); 
          return list; 
          
       }catch(Exception e1){ 
              addMessage("Erro em listar categorias!"); 
              return null; 
            }    
   } 
  
   public String destroy() { 
      try{ 
            HibernateUtil.beginTransaction(); 
            Session session = HibernateUtil.currentSession(); 
            Categoria categoria = getCategoriaFromRequestParam(); 
            session.delete(categoria); 
            HibernateUtil.commitTransaction(); 
            addMessage("Categoria deletada com sucesso.");            
        } catch (Exception ex) { 
                addMessage("Erro ao remover categoria!"); 
          } finally{HibernateUtil.closeSession();} 
        return "categoria_list"; 
    } 

    public Categoria getCategoriaFromRequestParam() { 
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
        HttpServletRequest request = (HttpServletRequest)ec.getRequest(); 
        String param = request.getParameter("descricao"); 
        System.out.println("descricao em getCategoriaFromRqPar="+param); 
        return this.findByDescricao(param);  
        
    } 

   public static void addMessage(String msg) { 
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg); 
        FacesContext fc = FacesContext.getCurrentInstance(); 
        fc.addMessage(null, facesMsg); 
    } 
    
    
   public String editSetup() { 
        setCategoriaFromRequestParam(); 
        return "categoria_edit"; 
    } 
public void setCategoriaFromRequestParam() { 
        Categoria categoria = getCategoriaFromRequestParam(); 
        if(categoria==null) System.out.println("categoria nulo"); 
        setCategoria(categoria); 
    } 
    
    public String edit() { 
        try{ 
             HibernateUtil.beginTransaction(); 
             Session session = HibernateUtil.currentSession(); 
             session.merge(categoria); 
             HibernateUtil.commitTransaction(); 
             addMessage("Categoria atualizada com sucesso."); 
        } catch (Exception ex) { 
            try { 
                 addMessage("Erro ao atualizar categoria!"); 
            } catch (HibernateException e) 
            {throw e;} 
            /*{System.out.println("erro em edit categoria");}*/ 
        }finally{ HibernateUtil.closeSession(); } 
        return "categoria_list"; 
    } 
    
    
}// fim da classe CategoriaFacade

Quem puder me auxiliar, fico muito grato

2 Respostas

P

em qual método esta dando erro? qual linha?

olhando por cima, me parece q tem alguma coisa estranha com seu mapeamento do Hibernate…vc falou q o relacionamento eh:

Categoria 1…N Produto certo?

então pq em Produto vc tem uma Collection de Categoria? Nesse caso, na classe Produto, vc teria um objeto do tipo Categoria, e faria o mapeamento OneToMany…

Acho q vc precisa de uma revisão no seu modelo de banco e consequentemente no mapeamento do Hibernate…

manda mais infos sobre o seu modelo e seu mapeamento…

flw

J

Oi Pedro!

Sou iniciante em java. A collection de categoria em produto é(ra) p/ poder criar o combo do relacionamento, ou seja escolher a categoria a qual o produto vai pertencer, tentativa e erro. Como faço a declaração de Categoria em Produto então??. Os mapeamentos estão certos, se puder, me passa como faço p/ popular o combo da categoria (cod_cat), para gravação do produto.

Mapeamento Categoria

<hibernate-mapping>
    <class name="beans.Categoria" 
           table="categoria" 
           catalog="svo2">
     <id name="cod_cat" 
         type="java.lang.Integer">
         <column name="cod_cat" />
         <generator class="native" />
     </id>
     <property name="descricao" type="java.lang.String">
       <column name="descricao" length="60" />
     </property>

     <set name="cat_prod"
	     inverse="true">
             <key column="cod_prod"/>
             <one-to-many class="beans.Produto"/>
	</set>
 
 </class>
</hibernate-mapping>

Mapeamento Produto

<hibernate-mapping>
    <class name="beans.Produto" 
           table="produto" 
           catalog="svo2">
        <id name="cod_prod" 
            type="java.lang.Integer">
            <column name="cod_prod" />
            <generator class="native" />
        </id>
        <property name="descricao" type="java.lang.String">
          <column name="descricao" length="60" />
        </property>
        <property name="qtde_est_min" type="java.lang.Integer">
          <column name="qtde_est_min" length="15" />
        </property>
        <property name="qtde_est_max" type="java.lang.Integer">
              <column name="qtde_est_max" length="15" />
        </property>
        <property name="valor_custo" type="java.lang.Float">
              <column name="valor_custo" length="15" />
        </property>
        <property name="valor_revenda" type="java.lang.Float">
              <column name="valor_revenda" length="15" />
        </property>
        <property name="imagem" type="java.sql.Blob">
              <column name="imagem" />
        </property>        

       <many-to-one
          name="item_pedido"
          column="cod_prod"
          class="beans.Item_Pedido"
          insert="false" update="false"/>     
        
        <many-to-one
          name="prod_cat"
          column="cod_cat"
          class="beans.Categoria"/>
    </class>
</hibernate-mapping>

O problema, é que estou apanhando para pegar a kf cod_cat na classe produto e depois busca-la pelo como no jsp. Se puder me dar umas dicas, ajudaria bastante.

Valeu

Criado 12 de julho de 2007
Ultima resposta 12 de jul. de 2007
Respostas 2
Participantes 2