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
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
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
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
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
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 ";