Erro jpa

oi galera

to tentando fazer uma consulta com um campo String e está lançando uma exceção “NoResultException”, sendo que existe esse registro no banco.

Minha consulta é essa:

String hql = "SELECT c FROM Cadastro c WHERE c.codigounico =:pCodigoUnico ";
			Query query = getEntityManager().createQuery(hql).setParameter("pCodigoUnico", codigo);
			cadastro = (Cadastro)query.getSingleResult();

Eu passo o codigo 1140 e no banco existe. Se eu faço a consulta sql manualmente no banco, ele localiza. Se ele faz a consulta por essa String hql, não traz nada.

Alguem sabe porque?

É como se tivesse enviando uma consulta dessa

select * from Cadastro where codigounico = 1140

dai não traz nada mesmo

e mandando com aspas, traz resultado

select * from Cadastro where codigounico = "1140"

Nos campos numéricos não se usa aspas simples caso seu campo seja de um tipo alpha ai sim utiliza aspas simples ‘’

Acesse: www.tiagoek.com.br

acredito que seu erro seja a falta do .*

exemplo

String hql = "SELECT c.* FROM Cadastro c WHERE c.codigounico =:pCodigoUnico "; Query query = getEntityManager().createQuery(hql).setParameter("pCodigoUnico", codigo); cadastro = (Cadastro)query.getSingleResult();

Acesse: www.tiagoek.com.br

[quote=tek]acredito que seu erro seja a falta do .*

exemplo

String hql = "SELECT c.* FROM Cadastro c WHERE c.codigounico =:pCodigoUnico "; Query query = getEntityManager().createQuery(hql).setParameter("pCodigoUnico", codigo); cadastro = (Cadastro)query.getSingleResult();

Acesse: www.tiagoek.com.br[/quote]

em hql se você usar “select c” ele vai retornar o objeto sim, eu costumo fazer desse jeito inclusive.

nos campos alfa usando o setParameter acho que você tem que usar aspas mesmo como o tek disse, ele não vai adicionar como o setString do jdbc, mas se o seu objeto Query for o de org.hibernate ao invés de javax.persistence. então você vai ter um setString que seta com as aspas automaticamente de forma semelhante ao jdbc (supondo que você tem um retorno do tipo EntityManager do método getEntityManager, terá a Query do javax.persistence, se fosse um Session do hibernate teria o Query dele).

mas como eu colocaria aspas no parametro String?
eu nao quero usar Query do hibernate, to usando do jpa. Entao nao tem como setar setString.

eu ja tentei de varias formas e nao deu jeito…

Tentei assim:

Query query = getEntityManager().createQuery(hql).setParameter("pCodigoUnico", new String(codigoUnico));

e assim:

Query query = getEntityManager().createQuery(hql).setParameter("pCodigoUnico", "\""codigoUnico"\""));

nada deu certo…nao trouxe resultado

agora que vi sua resposta… você tem que usar aspas simples e não dupla neste caso…