Consulta JPQL

Pessoal bom dia!

Estou aprendendo JPA e estou com um problema no retorno de uma consulta JPQL, preciso receber o id de determinado Departamento, mas retorna o seguinte erro:

java.lang.IllegalArgumentException: org.hibernate.QueryException:
could not resolve property:
dep_cod of:
model.bean.DepartamentoBean [SELECT e.dep_cod FROM model.bean.DepartamentoBean e WHERE e.dep_nome =:Informática]

meu método que busca o código é o seguinte:

public Integer getCodigo (String jpql) {
        Query query = em.createQuery(jpql);
        Integer codigo = query.getFirstResult();

        return codigo;
    }

e a String jpql = “select e.dep_cod from DepartamentoBean e where e.dep_nome =:‘informatica’”

alguém poderia me ajudar?

Agradeço desde já.

Edimil,

Está parecendo que tem : a mais, o correto não seria:

O erro também indica que não existe a propriedade ‘dep_cod’ na sua classe (não confundir com nome do campo da tabela, pode ser que eles tenham sido declarados com nome diferente).

jamirdeajr obrigado pela resposta, me ajudou neste 1º problema, eu estava passando um campo da tabela do banco, mas entendi que com JPA devemos informar o campo criado na classe bean, outra coisa que aprendi foi a respeito do método getFirstResult() que me trás a posição do registro na lista e como só tinha um estava me retornando zero, e não encontrei nenhum método que me retorne só um registro, poderia me ajudar?

Eu preciso receber o valor do campo código na tabela, a consulta agora ficou assim:

SELECT e.depCod FROM DepartamentoBean e WHERE e.depNome =:" + desc;

Olá Edimil,

Neste caso você usa o método getSingleResult mais ou menos assim:

[code]public Integer getCodigo (String jpql) {
try {
Query query = em.createQuery(jpql);
Integer codigo = (Integer) query.getSingleResult();

    return codigo;
} 
catch (NoResultException e) {
    System.out.printf("Código não encontrado"); 
} catch (Exception e) {
    e.printStackTrace();
}

return 0;

}[/code]
Inclui uma tratamento de exceções simples, o correto é evitar a mais ‘genérica’ Exception e incluir mais específicas.

Não entendi bem o seu uso do ‘=:’. Você usa assim quando quer setar o valor de parâmetro, Ex.:

		String jpql = "SELECT e.depCod FROM DepartamentoBean e WHERE e.depNome =:desc";
		Query query = em.createQuery(jpql);
		
		query.setParameter("desc", "Informatica");
		
		Integer codigo = (Integer) query.getSingleResult();

jamirdeajr deu certo, eu estava passando o parâmetro errado, minha consulta está ficando assim:

String sql = "SELECT e FROM DepartamentoBean e WHERE e.depNome =?1";

e meu método:

public Integer getCodigo (String jpql, String valor) {
        Query query = em.createQuery(jpql);
        query.setParameter(1, valor);
        List registro = query.getResultList();
        Integer codigo = registro.get(0).hashCode();
        return codigo;
    }

Valeu mesmo!!!