Select IN

13 respostas
biroska

Olá caros,

Estou montando uma HQL e tenho que utilizar algo do tipo

select obj ContratoEmpresarialEntity from ContratoEmpresarialEntity obj where obj.status in ( :parametro )

Posso trabalhar o argumento :parametro como um List?

valeu

13 Respostas

fabiozoroastro

http://www.coderanch.com/t/217898/ORM/java/clause-HQL

biroska

Opa, ainda não estou conseguindo utilizar o array de objetos como parametro de uma named query, vcs poderiam dar uma mão? valeu!

Query na Entity

@NamedQuery(name = "recuperaFaturas", query = " SELECT CE FROM ContratoEntity CE " " WHERE CE.Fatura IN ( :listFaturas ) ")
Action
faturas está populada com uma lista do tipo FaturasEntity

Mensagem de erro:
java.lang.IllegalArgumentException: Can not set java.lang.Long field br.com.Fatura.id to java.util.ArrayList

Valeu!

fabiozoroastro

Biroska,

Poste o seu mapeameno de ContratoEntity e também a implementação do método recuperaFaturas.

biroska

ContratoEntity

@OneToOne (targetEntity = FaturaEntity.class, fetch = FetchType.LAZY) @JoinColumn (name = "CDFATURASEQ") protected Fatura Fatura;

Método

public List<ContratoEntity> recuperaFaturas( List<Long> listFaturas) throws HibernateException, PlcException { List<ContratoEntity> lista = ( List<ContratoEntity> ) recuperaListaViaNamedQuery("recuperaFaturas", new String[] {"listFaturas" }, new Object[] { listFaturas} ); return lista; }

fabiozoroastro

Posta o método recuperaListaViaNamedQuery.

biroska

Não possuimos acesso ao fonte do método “recuperaListaViaNamedQuery” mas passado os argumentos ele retorna uma lista.

Ele funiona, o utilizei para recuperar as “faturas”.

fabiozoroastro

Biroska,

eu queria ver a implementação para ver se você estava usando a API do JPA ou do Hibernate.

De qualquer forma, ele está reclamando que o esperado é um Long e não uma Collection.
Creio que ele não esteja entendendo o seu IN na HQL.

biroska

Opa, é API do Hibernate.

Por que ele não estaria reconhecendo o “IN” ? estranho não é?

fabiozoroastro

Biroska,

é provável que ao invés do método setParameterList para setar a lista, esteja sendo utilizado o setParameter

biroska

Alterei a abordagem…

estou passando o parametro dentro do IN como uma String com valor: 12, 16, 18

Neste caso, o erro é: Can not set java.lang.Long field br.com.Fatura.id to java.lang.String

Alguma sugestão para contornar esses problemas?

valeu!

fabiozoroastro

Biroska,

Não adiantará você passar a String dessa forma.

Ou você passa um Long(Sem utilizar o IN), ou você mesmo executa a HQL e usa o método setParameterList

biroska

Será que algo desse tipo resolveria?

biroska

Encontrei a minha saída…vou ter que fazer algo do tipo…

StringBuilder sql = new StringBuilder();

sql.append(....)

query.setParameterList(…);

valeu!

Criado 30 de agosto de 2011
Ultima resposta 31 de ago. de 2011
Respostas 13
Participantes 2