Iniciando no Mundo de Pesquisa HQL com Hibernate Annotations, Como Realizar Esta Pesquisa?

3 respostas
R

Ola pessoal tudo bem, espero que sim !

A Duvida hoje e a seguinte:

Tenho uma Tabela de Produtos prod_produtos da seguinte forma :

@Entity
@Table( name = "prod_Produtos")
public class prod_Produtos implements Serializable {
 
    // Definindo o Gerador de Sequencia Automatica.
    @Id
    @SequenceGenerator          (name       ="generator_prod_produtos",sequenceName="sequence_prod_produtos")
    @GeneratedValue             (generator  ="generator_prod_produtos")

    private Long prod_codigo;
    
    // Definindo a Coluna   :   CODIGO DE BARRAS.
    @Column(name ="prod_cod_barras", length = 20,  nullable=true, insertable=true, updatable=true)
    private String prod_cod_barras;
    
    // Definindo a Coluna   :   DATA DE CADASTRO.

    
    // Definindo a Coluna   :   DATA DE ALTERACAO.
    
    // Relacionamento com a Tabela de Categoria de Produto.
    @OneToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn( name = "cod_categoria")
    private prod_Categoria categoria;
    
    
    //Definindo a Coluna    :   DESCRICAO DO NOME DO PRODUTO.
    @Column(name = "prod_descricao", length=80,     nullable=true,  insertable=true,    updatable=true)
    private String prod_descricao;
    
    
    // Relacionamento com a Tabela de Unitarios.
    @OneToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn( name = "cod_unitario")
    private prod_Unitarios unitario;
    
    
    // Relacionamento com a Tabela de Fabricante.
    @OneToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn( name = "cod_fabricante")
    private prod_Fabricante fabricante;

    // Relacionamento com a Tabela de Fornecedor.
    @OneToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn( name = "cod_fornecedor")
    private prod_Fornecedor fornecedor;
    
    //Definindo a Coluna    :   PRECO DE CUSTO.
    @Column(name = "prod_preco_custo")
    private Double prod_preco_custo;
    
    // Definindo a Coluna   : LUCRO.
    @Column(name = "prod_lucro")
    private int    prod_preco_lucro;
    
    // Definindo a Coluna   : PRECO C/ TAXA.
    @Column(name = "prod_preco_taxa")
    private Double prod_preco_taxa;
    
    // Definindo a Coluna   : PRECO VENDA.
    @Column(name = "prod_preco_venda")
    private Double prod_preco_venda;
    
    // Definindo a Coluna   : QUANTIDADE ESTOQUE.
    @Column(name = "prod_qtde")
    private int    prod_qtde;
    
    // Definindo a Coluna   : QUANTIDADE MINIMA.
    @Column(name = "prod_qtde_minima")
    private int    prod_qtde_minima;
    
    // Relacionamento com a Tabela de Localizacao do Estoque.
    @OneToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn( name = "cod_localizacao")
    private prod_Localizacao localizacao;
    
    // Definindo a Coluna   : IMAGEM DO PRODUTO.
    
    
    // Definindo a Coluna   : OBSERVACAO.
    @Column(name = "prod_observacao")
    private String  prod_obs;
    
geters e seters....

Ok gostaria de saber o seguinte:
Ao usuario Iniciar um Novo Cadastro, quando ele digitar ou escanear um novo codigo de barras, como realizar esta pesquisa utilizando o HQL ?

Estou tentando :

public boolean FCodBarras(String CodBarras){
        
        return getPurePojo("from prod.prod_produtos where prod.prod_cod_barras = :" + CodBarras ) != null;
    }

Onde meu getPurePojo e :

// Realizando a Pesquisa Atraves de uma Consulta GENERICA.
        protected Serializable getPurePojo(String query, Object... params){
            Session ses = getSession();

            Query qr = ses.createQuery(query);

            for(int i = 1; i <= params.length; i++){
                qr.setParameter(i, params[i-1]);
            }

            Object toReturn = qr.uniqueResult();

            ses.getTransaction().commit();
            ses.close();

            return (Serializable) toReturn;
        }

Agradeco a Atencao e Ajuda de Todos um Forte Abraco, Ricardo Scarpim.

3 Respostas

WRYEL

Tente passar hql’s +/- assim:

"FROM Entidade e WHERE e.atributo1 = ? AND e.atributo2 = ?"

Sendo Entidade, uma classe gerenciada pelo JPA

[]'s

edit: sua duvida:

"FROM prod_Produtos p WHERE p.prod_cod_barras = ?"
R

Amigo muito, mais muito obrigado mesmo,mais ainda ta dando erro, o erro mostrado e o seguinte :

Exception in thread "AWT-EventQueue-0" org.hibernate.hql.ast.QuerySyntaxException: prod_produtos is not mapped [from prod_produtos p where p.prod_cod_barras = ?]

Modifiquei a maneira de Realizar a Pesquisa para este Modo :

public boolean ExisDigitado(String CampoPESQ, String Digitado){
        
        boolean Achou = false;
        
        Session ses = getSession();
        
        //JOptionPane.showMessageDialog(null, "from prod_produtos where " + CampoPESQ + " =  ''" + Digitado + ''''"");
        
        Query qry   = ses.createQuery("from prod_produtos p where p.prod_cod_barras = ?");
        qry.setParameter(CampoPESQ, Digitado);
        
        Achou   = (boolean) qry.uniqueResult();
        
        ses.getTransaction().commit();
        ses.close();
        
        return Achou;        
    }

Muito Obrigado a Todos, mais ainda nao esta Funcionando, um Abraco.

R

Eu Estava esquecendo de mapear a consulta tambem, Ficou Assim :

public boolean FAchouConteudo(String CampoPesq, String Digitado){
        boolean Achou = false;
        
        Session ses = getSession();
        String Tx   = "from prod_Categoria where " + CampoPesq + " =:" + Digitado;
        
        Query qry   = ses.createQuery("from prod_Categoria where " + CampoPesq + " =:" + Digitado);
        qry.setString(Digitado, CampoPesq);
        
        prod_Categoria Cat =(prod_Categoria) qry.uniqueResult();
        
        Achou   =(Cat != null)       ;
        ses.getTransaction().commit();
        ses.close();
        
        return Achou;
    }

Na hora de usar estou fazendo Assim :

// Instanciando as Pesquisas.
        prod_CategoriaDAO objPesq = new prod_CategoriaDAO();
        
        String Concatena = "sabonete";
               
        if(!objPesq.FAchouConteudo("cat_descricao", PROD_DESCRICAO.getText()) ){
            JOptionPane.showMessageDialog(null, "Nao Achou a Categoria Pesquisada. ");
        }else
        {
            JOptionPane.showMessageDialog(null, "Foi Localizada a Categoria");
        }

Mais esta dando mensagem de que nao localizou nada na base, tem algo errado, onde pessoal ?

Muito obrigado.

Criado 9 de fevereiro de 2011
Ultima resposta 18 de fev. de 2011
Respostas 3
Participantes 2