Consulta HQL com where

8 respostas
E

Pessoal estou com dificuldades para montar uma consulta HQL com where… quero abri um JInternalFrame filtrado passando o valor de filtro o que seleciono no meu jTable… mais não estou conseguindo montar a consulta …

a minha consulta é esta

Query lista = sessao.createQuery("from "+ classe);

O meu código todo é este

InterfaceDaoGenerica

package Dao;

import java.util.List;
import org.hibernate.Query;

public interface InterfaceDaoGenerica
{

    public void inserir();
    public void alterar();
    public void excluir();
    public List listar(String classe);
    public Query listarCriterio(String classe);
}

MEU DAO GENERICO E ESTE…

public class DaoGenerico<Obj> implements InterfaceDaoGenerica{

    private final Session sessao;
    Transaction tx_trans = null;
    private Obj objeto;
    public DaoGenerico(Obj parametro)
    {
       this.sessao = HibernateUtil.getSessao();
       this.objeto = parametro ;
    }
    
    public void inserir() 
    {
        try {

            tx_trans = sessao.beginTransaction();
            sessao.save(objeto);
            tx_trans.commit();

        } catch (Exception erro)
        {
            JOptionPane.showMessageDialog(null, "Erro: "+erro );
            tx_trans.rollback();
        }
 
    }

    public void alterar()
    {
        try {

            tx_trans = sessao.beginTransaction();
            sessao.update(objeto);
            tx_trans.commit();

        } catch (Exception erro) {

            JOptionPane.showMessageDialog(null, "Erro:  "+erro);
            tx_trans.rollback();
        }
    }

    public void excluir() {

        try {

            tx_trans = sessao.beginTransaction();
            sessao.delete(objeto);
            tx_trans.commit();

        } catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,"Erro:  "+e);
            tx_trans.commit();
        }
       
    }

  @Override
  public List listar(String classe)
  {

      List lista = sessao.createQuery("from "+classe).list();

      return lista;
  }

  @Override
  public Query listarCriterio(String classe)
  {
      Query lista = sessao.createQuery("from "+ classe);
      return lista;
  }

}

MEU METODO PARA CARREGAR OS DADOS E ESTE

public void  abrirCampos()
{
     try {

            Cargo cargo = new Cargo();
            DaoGenerico obj_cargo = new DaoGenerico(cargo);

            List<Bens.Cargo> list_cargo = new ArrayList();
            list_cargo = obj_cargo.listarCriterio("Cargo").list();

            int tamanho_lista = list_cargo.size();
        for (int i = 0; i < tamanho_lista;i++)
        {
            cargo = list_cargo.get(i);
            jTextField1.setText(""+cargo.getIdcargo());
            jTextField2.setText(cargo.getDesccargo());
         }
        } catch (Exception erro)
        {
            JOptionPane.showMessageDialog(null, "Erro:  "+erro);
        }
}

Já tentei fazer assim

Query lista = sessao.createQuery("from "+ classe + "where idcargo="segundo criterio);

mais sem exito.

Pesso desculpas pela mensagem inicial que não estava bem formatada… sou novo no forum e aguardo a ajuda de vcs…

De já obrigado.

8 Respostas

L

Já te falaram que Java é case sensite ?? lower case please...

e coloca o seu codigo entre as tags [code]

E

Eu sei que o java é case sensite… vc poderia me dar um exemplo de como ficaria minha consulta… onde eu coloca as tegs…[]…

de já agradeço sua resposta e espero muito um exemplo seu…

obrigado…

luis

L
ediclebb:
Eu sei que o java é case sensite.... vc poderia me dar um exemplo de como ficaria minha consulta.... onde eu coloca as tegs..[]....

de já agradeço sua resposta e espero muito um exemplo seu...

obrigado...

luis

repetindo, java é case sensitive e o GUJ também é... não poste em CAPS LOCK isso prejudica a leitura.... coloque seu código entre as tags [code] para facilitar a leitura... eu nem li o seu post, posi ele esta mau formatado....

E

Obrigado pela dica… agora estar formatado… aguardo a ajuda de todos

Luís

L

posta a Exception, que vai ajudar a debugar o erro...

de toda forma, assim é + simples

@Override  
   public List listar(Class classe)  
   {  
       return sessao.createCriteria(classe).list();  
   }  
   
   @Override  
   public Criteria listarCriterio(String classe)  
   {  
       return sessao.createCriteria(classe);
   }

e assim vc pode o segundo criteria assim

List lista = sessao.createCriteria(classe).add(Restriction.eq("idcargo",segundoCriterio)).list();

para montar um query HQL para propriedade vc deve fazer algo asism

String query = "from %s c where c.campo = :valor";

public List listarCriterio(String classe,Object valor) {
    return sessao.createQuery(String.format(query,classe)).setParameter("valor",valor).list();
}
E

meu codigo ficou assim

package Dao;

import java.util.List;
import org.hibernate.Query;

public interface InterfaceDaoGenerica
{

    public void inserir();
    public void alterar();
    public void excluir();
    public List listar(String classe);
    public List listarCriterio(String classe, Object valor);
    
}
public void  abrirCampos()
{
     try {

            Cargo cargo = new Cargo();
            DaoGenerico obj_cargo = new DaoGenerico(cargo);
            Object cod = 1;
            List&lt;Bens.Cargo&gt; list_cargo = new ArrayList();
            list_cargo = obj_cargo.listarCriterio("Cargo",cod);

            int tamanho_lista = list_cargo.size();
        for (int i = 0; i &lt; tamanho_lista;i++)
        {
            cargo = list_cargo.get(i);
            jTextField1.setText(""+cargo.getIdcargo());
            jTextField2.setText(cargo.getDesccargo());
         }
        } catch (Exception erro)
        {
            JOptionPane.showMessageDialog(null, "Erro:  "+erro);
        }
}
@Override
  public List listar(String classe)
  {

      List lista = sessao.createQuery("from "+classe).list();

      return lista;
  }

  String query = "from %s c where c.campo = :valor";

  @Override
  public List listarCriterio(String classe, Object valor)
  {
       return sessao.createQuery(String.format(query,classe)).setParameter("valor",valor).list();
  }

Mensagem de erro

Erro:org.hibernate.QueryException:could not resolve property: campo of:Bens.Cargo[from Bens.Cargo c where c.campo=:valor]

L

sim, sim… isso foi só um exemplo… vc deveria trocar c.campo por um campo do seu objeto

E

Lavieri muito obrigado… isso era realmente o que queria… muito obrigado mesmo e uma boa semana…

Luis

Criado 16 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 8
Participantes 2