Consulta JPA com IN

9 respostas
B

Olá comunidade,

Como ficaria a consulta abaixo, só que passando uma lista?É possível passar um array de integers como parâmetro no in?

Ex:

9 Respostas

marcos1EM
Utilize o setParameterList Ex:
List<Integer> listInt = new ArrayList<Integer>();
        listInt.add(1);
        listInt.add(2);
        listInt.add(3);
        listInt.add(4);
        listInt.add(5);

        List ret = getSession().createQuery("SELECT p FROM Pessoa p where p.id in (:listInt)").setParameterList("listInt",listInt ).list();
arthurminarini

tente

hql

“SELECT m FROM Minarini AS m WHERE m.aulas in (:aulasVetor)”

no java

query.setParameterList(“aulasVetor”, myList)

arthurminarini

quando eu estava respondendo o marcos não estava constava ainda heheheheh desculpe pela duplicação

B

hmmmmmmmm.

Só que tem um problema.Esses exemplos que vocês deram foi para o Hibernate né?

O problema que eu estou usando o TopLink como provedor.Ele não tem um método “setParameterList”.

Quando eu seto a lista, está sendo lançada a seguinte exceção:

marcos1EM

Sim, eu não tinha me atentado que aquele exemplo é para o hibernate, a Query do JPA não tem o método setParameterList, infelizmente não sei te ajudar.

arthurminarini

cara da pra tu fazer na mão mesmo! pega uma string vazia vai dando um += nela com os valores do seu vetor depois vc concatena sua consulta com essa string. Exemplo:

String variavelComValores = “”;

for () {

variavelComValores +=

}

select a from Arthur where a.cod in ( + variavelComValores + );
marcos1EM

arthurminarini:
cara da pra tu fazer na mão mesmo! pega uma string vazia vai dando um += nela com os valores do seu vetor depois vc concatena sua consulta com essa string. Exemplo:

String variavelComValores = “”;

for () {

variavelComValores +=

}

select a from Arthur where a.cod in ( + variavelComValores + );</blockquote>

Se for fazer isso não utilize String, dê preferência para StringBuilder, pois a concantenação de Strings cria objetos desnecessários, tornando mais lento a execução

B

Na verdade eu tava querendo evitar concatenar strings, mas se não tem jeito. rs

Andei lendo a documentação do JPA 2.0, e é possível setar um array para casos como esse no IN.Eu fiz um teste aqui e realmente funcionou.

Vou ver se adoto o JPA 2.0 no meu projeto.

Obrigado pela ajuda pessoal.

augustocolom

Bernardo:
Na verdade eu tava querendo evitar concatenar strings, mas se não tem jeito. rs

Andei lendo a documentação do JPA 2.0, e é possível setar um array para casos como esse no IN.Eu fiz um teste aqui e realmente funcionou.

Vou ver se adoto o JPA 2.0 no meu projeto.

Obrigado pela ajuda pessoal.

Funcionou, legal! Cola aí pra eu ver como ficou.

Criado 19 de novembro de 2010
Ultima resposta 24 de nov. de 2010
Respostas 9
Participantes 4