JPQL problema na construção da lógica de um select.[RESOLVIDO]

Pessoal tenho duas entidades:
A Contato que possui um atributo que é uma collection de Números (mapeado com @OneToMany) e tem a entidade Número propriamente dita.

Quero implementar um método que identifique a descrição do Contato por um número que é fornecido como String. (lembrando que um contato pode ter 1 ou mais números)

Quero fazer algo como :

"SELECT contato.descricao from contato,numero where contato.id = Contato_Numero.contatoID AND Contato_Numero.numeroID = ?1"
query.setParameter(1,Numero.getId());// eu passo o ID da entidade numero que desejo obter a descricao

O Select é ilustrativo, não sei como fazer com a JPQL, pois a entidade Contato possui uma coleção de Numeros, ou seja, existe essa JOIN TABLE que eu uso no meu exemplo(Contato_Numero), porém eu não gostaria de fazer uma QUERY nativa, pra poder manter a portabilidade de banco.

Provavelmente este é um erro corriqueiro com quem já trabalha ha algum tempo com hibernate, se alguém puder me dar uma luz com relação ao select eu agradeço.

[]'s

tenta assim:from Contato c where c.numeros.numeroID = ?1

[quote=romarcio]tenta assim:from Contato c where c.numeros.numeroID = ?1
[/quote]

Até brilhei os olhos quando vi a simplicidade do seu POST, pena que não funcionou, acabei de rodar o teste unitário. :frowning:

Opa, foi mal. Li Coleção e acabei fazendo a consulta para atributo simples.
Com coleção você usa Join, assim:

"Select c from Contato as c join c.numeros as n where n.numeroID  = ?1"

Eu consegui resolver de outra forma Romarcio

fiz com MEMBER OF, segue abaixo o exemplo

"Select contato FROM Contato contato, Numero num WHERE num.id = ?1 AND num MEMBER OF contato.numeros "
// contato.numeros =  minha colecao de objetos Numero
// usei o placeHolder pra comparar o ID do objeto numero e foi Profit :D

De qualquer forma, muito obrigado por me ajudar, estou começando a tentar aplicar o uso do Hibernate em um projeto e ainda me encontro deveras perdido em algumas situações.

Muito obrigado.

[]'s

Nunca tinha usado esse MEMBER OF.

Do modo que você fez, trabalha com 2 classes separadamente Contato e Numero.

Do modo que eu te passei, você trabalha apenas com a classe Contato, e aproveita o relacionamento que foi mapeado pela coleção Numeros, usando o Join.

Legal que conseguiu resolver.

Eu acho mais simples assim:

E se não me engano esse “memberof” vai fazer fazer uma subquery e não um join para retornar o resultado.