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')
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();