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
}