eu tentei assim brother mais supondo quer uma pessoa tenha mais de um endereco na cidade ou estado o mesmo não iria retorna mais de um registro ?, pensei em usar o distinct
Rodrigo_Sasaki
Sim, você pode usar o distinct pra isso.
J
john182
campea testei aqui e não deu certo tipo posso cadastra a pessoa e não cadastrar o endereço dela ou seja posso ter o cadastro de uma pessoa chamada joao no qual não cadastrei o endereço mando pesquisar pelo nome e o mesmo não me retorna nada pois não tenho endereço com o id do registro do joão
Rodrigo_Sasaki
Mas é exatamente isso que tem que acontecer. Se você quer buscar as pessoas que moram em SP, as pessoas sem endereço não podem aparecer no resultado, concorda?
Caso queira incluir pessoas sem endereço é necessário fazer um left join
J
john182
isso mesmo realmente se eu quiser as pessoas que moram em sp realmente não deve aparecer nada mais se eu fazer a busca informando somente o nome ? nesse caso realmente cabe o lefth join
J
john182
eu montei a query assim :
sql="SELECT DISTINCT p FROM Pessoa p "+"inner join p.pessoaFisica f "+"LEFT join p.listaPessoaEndereco e "+"LEFT join p.listaPessoaContato c "+"LEFT join p.listaPessoaTelefone t "+"where p.nome like ?1 and e.cidade like ?2 and e.uf like ?3 "+"and f.cpf like ?4";
mais não está trazendo todos os registro de pessoa fisica
lucciano01
o left só vai trazer o lado esquerdo da junção na consulta, deixa apenas o join para ver se dá certo
J
john182
retirando o left a consulta vem vazia tanto com o hibernate tanto executando direto no postgres
lucciano01
sql = "SELECT DISTINCT p FROM Pessoa p "
+ "inner join p.pessoaFisica f ON f.cpf like ?4 "
+ "join p.listaPessoaEndereco e ON e.cidade like ?2 "
+ "join p.listaPessoaContato c "
+ "join p.listaPessoaTelefone t "
+ "where p.nome like ?1 and e.uf like ?3 ";
J
john182
sql = "SELECT DISTINCT p FROM Pessoa p "
"inner join p.pessoaFisica f ON f.cpf like ?4 "
"join p.listaPessoaEndereco e ON e.cidade like ?2 "