Consulta HQL ManyToMany [resolvido]

Galera,

Estou usando SpringData, e através dele eu posso criar queries na interface.
Como vcs já devem saber… Então fica algo assim uma query simples:

     @Query("select p from Pessoa p where p.nome like ?1")
    public List<Pessoa> pegarPessoasComNomeIgualA(String nome);

Muito simples né?
Mas agora eu tenho um desafio maior…

Pessoa possui uma Lista de:
PessoaDocumento

Onde PessoaDocumento é um many to many com atributos. Tipo:
Pessoa p
Documento c
String valorDoDocumento

E eu preciso buscar todas as pessoas onde tem: Documento tipo X valor do documento tipo Y.

Imagino que seja algo do tipo

@Query("Select p from Pessoa p inner join PessoaDocumento pd on p.id = pd.pessoa.id AND pd.documento.valor = ?1 AND pd.documento.tipo = ?2")
public List<Pessoa> buscarPessoasDocumento(String valor, String tipoDocumento);

Deve estar errado, mas deve algo por aí (podem corrigir se quizerem)…

Agora o problema é que eu tenho
UMA LIST de Valor e uma LIST de tipoDocumento
e preciso fazer uma query semelhante a que fizemos aí em cima.
Isto é possível?

Obrigado

Acho que a sua query poderia ficar assim:

@Query("Select p from Pessoa p inner join PessoaDocumento pd on p.id = pd.pessoa.id WHERE pd.documento.valor = ?1 AND pd.documento.tipo = ?2")

[quote=Rafael Guerreiro]Acho que a sua query poderia ficar assim:

@Query("Select p from Pessoa p inner join PessoaDocumento pd on p.id = pd.pessoa.id WHERE pd.documento.valor = ?1 AND pd.documento.tipo = ?2") [/quote]

Na verdade o “on” não rolou… Então tive que fazer ela assim:

vlw

Na verdade, o problema do join é resolvido de outra forma:
http://docs.jboss.org/hibernate/orm/3.5/reference/pt-BR/html/queryhql.html#queryhql-joins

Ficaria algo assim:

Acho que fica um pouco mais bonito… :wink:

[quote=Rafael Guerreiro]Na verdade, o problema do join é resolvido de outra forma:
http://docs.jboss.org/hibernate/orm/3.5/reference/pt-BR/html/queryhql.html#queryhql-joins

Ficaria algo assim:

Acho que fica um pouco mais bonito… :wink: [/quote]

cara…

na verdade ficou assim: