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: :frowning:](//www.guj.com.br/images/emoji/twitter/frowning.png?v=5)
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.