Criar relacionamento no Hibernate para uso com JSF [Resolvido]

3 respostas
F

Oi galera, tudo bem,

tenho uma dúvida que é um pouco complexa, mas espero conseguir me expressar corretamente,

tenho uma aplicação Web que uso Hibernate e JSF, e nela tenho UMA pagina para cada tabela no meu banco de dados e nessa pagina eu faço as 4 operaçoes do crud(cadastrar, excluir, atualizar e recuperar)

Porém agora tem algumas paginas q não estou conseguindo relacionar minhas tabelas para exibir corretamente minha pagina.xhtml

Tentando explicar melhor:

Eu o “createCriteria” do Hibernate para fazer os relacionamentos

Tenho uma Tabela Pessoa que faz referencia para a tabela Salesianos(considere Salesiano o mesmo q Padre)
e a tabela Salesiano referencia a tabela ProduçãoIntelectual(ou seja, apenas Padres Salesianos tem produçoes cadastradas no sistema)

Consegui referenciar um atributo da tabela pessoas atraves da tabela de Salesianos, desssa forma abaixo, usando o createAlias

public void filtrar() {
         Session sessao = CriadorDeSessaoNovo.getSession();
         Criteria listagem_query = sessao.createCriteria(Salesianos.class)
                  .createAlias("pessoas", "pe")
                  .addOrder(Order.asc("pe.pes_nom_completo"))
                  .add(Restrictions.like("pe.pes_nom_completo","%"+getPes_nome_completo()+"%").ignoreCase());
         setSuaLista(listagem_query.list());
         sessao.close();
         
     }

porém agora preciso fazer algo semelhante a isso :

public void filtrar() {
         Session sessao = CriadorDeSessaoNovo.getSession();         
         Criteria listagem_query = sessao.createCriteria(Hist_Cursos_Especializados.class)
                  .createAlias("salesianos", "sa")
                  .addOrder(Order.asc("sa.pessoas.pes_nom_completo"))
                  .add(Restrictions.like("sa.pessoas.pes_nom_completo","%"+getPes_nom_completo()+"%")
                  .ignoreCase());
         setSuaLista(listagem_query.list());
         sessao.close();
     }

Porém este codigo q coloquei por ultimo nao funciona, o JSF ou o Hibernate(não sei quem faz isso) não consegui instanciar a classe, alguem tem alguma ideia de como posso resolver isso?

ProducaoIntelectual.java

package br.salesianos.modelo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;

@Entity
public class Producao_Intelectual implements Serializable {

    @Id
    @SequenceGenerator(name="generator_pin",sequenceName="sequence_pin")
    @GeneratedValue(generator="generator_pin")
    private Integer pin_id;

    @ManyToOne
    //@ForeignKey(name="nomeTabela_fkey_nomeAtributo_01")
    @ForeignKey(name="pin_fkey_cidade_01")
    //@JoinColumn(name="baseadoNoAtributo")
    @JoinColumn(name="cid_id")
    private Cidade cidade;

    @ManyToOne
    @ForeignKey(name="hco_fkey_salesianos_01")
    @JoinColumn(name="sal_id")
    private Salesianos salesianos;

    @ManyToOne
    @ForeignKey(name="hco_fkey_tpr_01")
    @JoinColumn(name="tpr_id")
    private Tipo_Producao tipo_producao;

    @Column
    @Temporal(TemporalType.DATE)
    private Date pin_data_inicial;

    @Column
    @Temporal(TemporalType.DATE)
    private Date pin_data_final;

//getter and seter
    
    
}

Salesianos.java

package br.salesianos.modelo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.NamedQuery;

@Entity
public class Salesianos implements Serializable {

    @Id
    @SequenceGenerator(name="generator_salesianos",sequenceName="sequence_salesianos")
    @GeneratedValue(generator="generator_salesianos")
    private Integer sal_id;

    @ManyToOne
    //@ForeignKey(name="nomeTabela_fkey_nomeAtributo_01")
    @ForeignKey(name="salesianos_fkey_pessoas_01")
    //@JoinColumn(name="baseadoNoAtributo")
    @JoinColumn(name="pes_id")
    private Pessoas pessoas;
        
    @Column(length=100)
    private String sal_categoria_italia;

    @Column(length=100)
    private String sal_categoria_brasil;

    @Column(length=100)
    private String sal_site;

    @Column(length=100)
    private String sal_email_institucional;

    @Column(length=100)
    private String sal_unimed;

    @Column
    private String sal_titulo_honorifico;

    @Column
    private String sal_hobby;

    @Column
    private String sal_dados_biograficos;

    @Column
    private String sal_apelido;

    @Column
    private String sal_linguas;

    @Column
    @Temporal(TemporalType.DATE)
    private Date sal_data_falecimento;

    @Column
    private String sal_local_falecimento;

    //@Column
    //private String sal_local_enterro;

    @Column
    private String sal_estado_falecimento;

    @Column
    private String sal_pais_falecimento;

//getter and seter
  
    
}

Pessoas

package br.salesianos.modelo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;

@Entity
public class Pessoas implements Serializable {

    @Id
    @SequenceGenerator(name="generator_pessoa",sequenceName="sequence_pessoa")
    @GeneratedValue(generator="generator_pessoa")
    private Integer pes_id;

    @ManyToOne
    //@ForeignKey(name="nomeTabela_fkey_nomeAtributo_01")
    @ForeignKey(name="pessoa_fkey_cidade_01")
    //@JoinColumn(name="baseadoNoAtributo")
    @JoinColumn(name="cid_id")
    private Cidade cidade;
        
    @Column(length=100)
    private String pes_prenome;

    @Column(length=100)
    private String pes_nome_meio;

    @Column(length=100)
    private String pes_sobrenome;

    @Column(length=100)
    private String pes_nome_pais_origem;

    @Column
    @Temporal(TemporalType.DATE)
    private Date pes_data_nascimento;

    @Column(length=100)
    private Integer pes_rg_num;

    @Column
    @Temporal(TemporalType.DATE)
    private Date pes_rg_dat;

    @Column(length=100)
    private String pes_rg_expedidor;

    @Column(length=100)
    private String pes_rg_estado;

    @Column(length=100)
    private String pes_cpf;

    @Column(length=100)
    private String pes_telefone1;

    @Column(length=100)
    private String pes_telefone2;

    @Column(length=100)
    private String pes_telefone3;

    @Column
    private String pes_email_pessoal;

    @Column(length=100)
    private String pes_cep;

    @Column(length=100)
    private String pes_logradouro;

    @Column(length=100)
    private String pes_bairro;

    @Column(length=100)
    private String pes_numero;

    @Column(length=100)
    private String pes_complemento;

    @Column(length=100)
    private String pes_nom_completo;

//getter and seter
    
}

3 Respostas

F

Acabei conseguindo resolver por conta propria, e agora q vejo o quanto era simples:

em vez de fazer isso com o createAlias

.createAlias("salesianos", "pessoas")

so mudei para isso

.createAlias("salesianos.pessoas", "pessoas")

ou seja, adicionei a ‘apelido’ ou ‘navegação’ diretamente na primeira String e funcionou perfeitamente

tiago.vt

vc naum ta conseguindo fazer o select pra trazer os resultados?

F

Não era isso, eu não estava fazendo corretamente o relacionamente entre as classes, ProduçãoIntelectual referencia Salesiano(Padre) e Salesiano referencia Pessoas , consegui fazer isso no meu post anterior como foi explicado

Criado 3 de maio de 2011
Ultima resposta 3 de mai. de 2011
Respostas 3
Participantes 2