How to return data through the Java Criteriaapi from more than one table?

Asked

Viewed 41 times

0

I have a class that doesn’t persist:

Peopleware.java

public class PessoaDadosSearch{

    private Long idPessoaDadosSearch;
    private String nome;
    private String cpf;
    private String municipioResidente;

    //getters e setters implementados

}

And the classes remaining in the bank:

Pessoa.java

@Entity
public class Pessoa{

   private Long idPessoa;
   private String nome;

   //getters e setters

}

Java document.

@Entity
public class Documento{

    private Long idDocumento;
    private String tipoDocumento;
    private String numeroDocumento;
    //getters e setters

}

Municipio.java

@Entity
public class Municipio{

   private Long idMunicipio;
   private String nomeMunicipio;
   //getters e setters

}

and Personal Data.java

public class PessoaDadosSearchDAO{

   //Outras implementações

   public List<PessoaDadosSearch> retornaPessoaDadosSearch(String nomePessoaAPesquisar, String cpfAPesquisar){
       List<PessoaDadosSearch> result = new ArrayList<PessoaDadosSearch>();

       // *COMO IMPLEMENTAR O CRITERIA API PARA ME RETORNAR A LISTA DE OBJETOS PessoaDadosSearch AQUI?*

       return result;
   }

}

How the implementation would look to return me to the list of Personal object?

1 answer

0

Considering,

  • em = instance of Entitymanager.
  • "municipio" = the name of the relationship column between Pessoa and Municipio in class Pessoa;
  • "documento" = the name of the relationship column between Pessoa and Documento in class Pessoa;
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<PessoaDadosSearch> criteria = builder.createQuery(PessoaDadosSearch.class);
Root<Pessoa> root = criteria.from(Pessoa.class);
Join<Pessoa, Municipio> mun = root.join("municipio");
Join<Pessoa, Documento> doc = root.join("documento");
criteria.select(builder.construct(PessoaDadosSearch.class, p.get("idPessoa"),      
p.get("nome"), mun.get("municipioResidente"));
List<Predicate> predicados = new ArrayList<>();
predicados.add(builder.equal(p.get("nome"), nomePessoaAPesquisar));
predicados.add(builder.equal(doc.get("numeroDocumento"), cpfAPesquisar)); 
criteria.where(predicados.toArray(new Predicate[0]));
result = em.createQuery(criteria).getResultList();

Browser other questions tagged

You are not signed in. Login or sign up in order to post.