Criteria: relacionamento e heranças

1 resposta
gilvan.sfilho

Boa tarde...
necessito de ajuda para realizar consultas utilizando Criteria.

Segue algumas das situações.

@Entity
public class Titulacao implements Serializable {

    public Titulacao() { }

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long idTitulacao;
    private String nomeTitulacao;
    private String abreviacaoTitulacao;

    @OneToMany(mappedBy="titulacao")
    private List<Pesquisador> pesquisadores;
...
@Entity
@PrimaryKeyJoinColumn(referencedColumnName="idPessoa")
@Inheritance(strategy=InheritanceType.JOINED)
public class Pesquisador extends Pessoa implements Serializable {

    public Pesquisador() { }

    private boolean docente;
    private boolean pesquisador;
    private String regimeDeTrabalho;

    private String curriculoLattes;

    @ManyToOne
    @JoinColumn(referencedColumnName="idTitulacao")
    private Titulacao titulacao;
    
    @OneToMany(mappedBy="orientador")
    private List<Projeto> projetos; 
...

Gostaria, por exemplo, de buscar a partir da classe titulação, todos os pesquisadores que tivesse determinada titulação. Ou então o inverso, a partir da classe pesquisadores buscar todos os pesquisadores que tenham determinada titulação.

-------------------------------------------------------------------------

Outra dúvida é quanto a consultas sobre classes que herdam características de outras classes. No exemplo acima, para cada classe que participe de um relacionamento eu tenho um objeto que indica a classe relacionada. Porém, no caso de herança isso não ocorre.

Segue o código:

Classe Pessoa
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa implements Serializable {

    public Pessoa() { }
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long idPessoa;

    //Dados pessoais
    private String nome;
    private String sexo;

    @Temporal(TemporalType.DATE)
    private Calendar dataDeNascimento;

    private String cpf;
    private String identidade;
    private String orgaoIdentidade;
    private String ufIdentidade;
    private String nacionalidade;
    private String pais;
    private boolean estrangeiro;
    private String passaporte;

    @Temporal(TemporalType.DATE)
    private Calendar inicioDoVisto;

    @Temporal(TemporalType.DATE)
    private Calendar fimDoVisto;

    private String endereco;
    private String bairro;
    private String cep;
    private String cidade;
    private String ufCidade;
    private String ddd;
    private String telefone;
    private String celular;
    private String email;
    private String senha;

    @ManyToOne
    @JoinColumn(referencedColumnName="idCentro")
    private Centro centro;
...
Classe Bolsista
@Entity
@PrimaryKeyJoinColumn(referencedColumnName="idPessoa")
@Inheritance(strategy=InheritanceType.JOINED)
public class Bolsista extends Pessoa implements Serializable {

    public Bolsista() { }

    //Link para o currículo Lattes do bolsista
    private String curriculoLattes;

    //Dados báncarios do bolsista
    private String agencia;
    private String conta;

    //Relacionamentos com outras tabelas
    @OneToMany(mappedBy="bolsista")
    private List<Projeto> projetos;
...

Como posso, utilizando criteria, buscar a partir da classe bolsista a pessoa relacionada com esse bolsista.
Ou, a partir da classe Pessoa, buscar por exemplo, todas as pessoas que são bolsista.

Fico no aguardo.. =)

1 Resposta

gilvan.sfilho

Opa, consegui através da classe Titulação buscar todos os pesquisadores de uma determinada titulação
Segue o código utilizado para tal.

...

Criteria cri = HibernateUtil.getSession().createCriteria(Titulacao.class);
cri.add(Restrictions.ilike("nomeTitulacao", "Mestre"));
cri.add("pesquisadores");
List<Titulacao> titulacoes = cri.list(); 
List<Pesquisadores> pesquisadores = titulacoes.getPesquisadores();

...

O objeto “pesquisadores” consiste em uma lista com todos os pesquisadores que possuam titulação de mestre.

Criado 8 de setembro de 2010
Ultima resposta 8 de set. de 2010
Respostas 1
Participantes 1