Dúvida com JPQL, uso de Collection com IN

Olá pessoal,

Estou tentando montar a seguinte query:

		List pessoas = new ArrayList();
		pessoas.add("Romario");
		pessoas.add("Micalateia");
		pessoas.add("Radio");
		
		List<PessoaFisica> pessoas03 = em.createQuery("select p from PessoaFisica p where p.nome in (:lista)")
		.setParameter("lista", pessoas).getResultList();

Ao meu ver essa seria a forma de fazer isso, certo? Mas isso me traz a seguinte mensagem:

EL Info]: 2010-11-23 22:09:08.481--ServerSession(23047631)--Thread(Thread[main,5,main])--file:/mnt/dadoswindows/estudo/utfpr/06-PersistenciaOO/Aula-04-20101119/workspace/JPQL-04/bin/_posBanco login successful
Exception in thread "main" java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter lista with expected type of class java.lang.String from query string select p from PessoaFisica p where p.nome in (:lista).

Sei que a mensagem diz que os parâmetros estão errados, mas minha coleção tem Strings e minha table tem textos, se faço direto:

select p from PessoaFisica p where p.nome in ('Micalateia', 'Romario')

Funciona, alguém tem uma sugestão?

Para passar uma lista como parâmetro utilize o setParameterList ao invés de setParameter

Correção… setParameterList não é do JPA e sim do Hibernate, eu sempre confundo… rsrs

Faltou vc “tipar” a lista…

[code] List pessoas = new ArrayList();
pessoas.add(“Romario”);
pessoas.add(“Micalateia”);
pessoas.add(“Radio”);

List pessoas03 = em.createQuery(“select p from PessoaFisica p where p.nome in (:lista)”).setParameter(“lista”, pessoas).getResultList(); [/code]

Vê se funfa…

[quote=neno]Faltou vc “tipar” a lista…

[code] List pessoas = new ArrayList();
pessoas.add(“Romario”);
pessoas.add(“Micalateia”);
pessoas.add(“Radio”);

List pessoas03 = em.createQuery(“select p from PessoaFisica p where p.nome in (:lista)”).setParameter(“lista”, pessoas).getResultList(); [/code]

Vê se funfa…
[/quote]

Ja tentei deixa-la como String, da o mesmo erro.
Será possível fazer isso sem usar o Hibernate?

Estou com esse mesmo problema, alguem já achou a solução?

Sei que o tópico é antigo, mas como ninguém deu a resposta resolvi postar.

Para funcionar no JPA 2.0 basta retirar os parênteses do (:lista), ficando assim:

		List<String> pessoas = new ArrayList<String>();
		pessoas.add("Romario");
		pessoas.add("Micalateia");
		pessoas.add("Radio");
		
		List<PessoaFisica> pessoas03 = em.createQuery("select p from PessoaFisica p where p.nome in :lista")
		.setParameter("lista", pessoas).getResultList();

Abraços
Douglas Junior

1 curtida