Select e JPA

6 respostas
ronnypeterson

Estou tentando fazer uma consulta no JPA, quando faço com a igualdade funciona legal:

@NamedQuery(name="pessoaByNome", query = "select p from Pessoa p where p.nome = :nome")

Mas quando faço com o like:

@NamedQuery(name="pessoaByNome", query = "select p from Pessoa p where p.nome like :nome")

Não retorna nenhuma linha. Tentei colocar % antes e depois mas dá erro (com ou sem aspas). O q será q estou fazendo errado?

Outra coisa: como posso fazer um distinct por uma coluna? Tentei colocar assim:

@NamedQuery(name="pessoaByNome", query = "select distinct p.nome from Pessoa p where p.nome = :nome")

Mas deu erro tbm. Alguém pode me ajudar com esses problemas?

Desde já agradeço a atenção de todos!

6 Respostas

H

Não fiz testes mas acredito que este select não funciona…
vc está selecionando “p” e “p” é um apelido para tabela… tente

select * from Pessoa where nome = :nome

para fazer o like vc tem que passar uma string que possua “%Texto%”
o % garante que a pesquisa vai ser feita procurando o “texto” independente do que tiver antes ou depois.

ronnypeterson

pois, testei a ideia hugomalta, mas não funcionou. Já a dica do Maracuja funciona desde que eu envie um nome absolutamente igual. Já pesquisei no google e não encontro nda. Mas agradeço a ajuda de vcs.

JMan

Tente somente assim

seufagner

Se você quer usar parâmetros e o LIKE, você deve passar a expressão completa:

Ex:

SELECT p FROM Projeto AS p WHERE p.nome LIKE :projeto

javax.persistence.Query.setParameter(“projeto”, “%string%”);

[]s

seufagner

Maracuja:
Tente somente assim

from Pessoa p where p.nome = :nome

Pela especificação você DEVE explicitar o SELECT e o que vai ser retornado, no caso “p”.

SELECT p FROM Pessoa p WHERE …

Algumas implementações isso funciona, a do Hibernate por exemplo, já que isso cheira a HQL. Na JPQL o correto é explicitar… Curioso… :slight_smile:

[]s

seufagner
select * from Pessoa where nome = :nome

Isso não funciona porque JPQL não é SQL, claro..

Tente:

@NamedNativeQuery(name = "Pessoa.selecionarPorNome", 
query="select * from Pessoa where nome = :nome ", resultClass = Pessoa.class)

[]s

Criado 5 de junho de 2007
Ultima resposta 6 de jun. de 2007
Respostas 6
Participantes 4