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]
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).
EDIMIL
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;
jamirdeajr
Olá Edimil,
Neste caso você usa o método getSingleResult mais ou menos assim:
publicIntegergetCodigo(Stringjpql){try{Queryquery=em.createQuery(jpql);Integercodigo=(Integer)query.getSingleResult();returncodigo;}catch(NoResultExceptione){System.out.printf("Código não encontrado");}catch(Exceptione){e.printStackTrace();}return0;}
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();
EDIMIL
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";