Hibernate Criteria "[RESOLVIDO]"

5 respostas
D

Galera to apanhando aqui pra fazer uma consulta relativamente simples com criteria do tipo:

select *  from Funcionario f, FuncionarioDocumento fd WHERE fd.nrDocumento like :crc

onde : crc é uma string recebida pela função de consulta.

tentei usar o alias porem não funciona pois eu carrego a classe Funcionario.class e queria carregar também a classe FuncionarioDocumento.class para ai sim usar a comparação.

alguém pode ajudar? valeu

5 Respostas

R

Poderia postar as duas entidades e como que ficou a criteria que você tentou fazer?

D
package br.gov.mi.sip.corp.rhmi;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(schema="CORP_RHMI",name = "FUNCIONARIO")
public class Funcionario implements java.io.Serializable {

	private static final long serialVersionUID = -345864153037047449L;

	@Id
	@Column(name = "ID_FUNCIONARIO", unique = true, nullable = false, precision = 22, scale = 0)
	@SequenceGenerator(name="SQ_ID_FUNCIONARIO",sequenceName="CORP_RHMI.SQ_ID_FUNCIONARIO",allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SQ_ID_FUNCIONARIO")
	private Long idFuncionario;
	
	@Column(name = "ID_TRATAMENTO", precision = 2, scale = 0)
	private Long idTratamento;
	
	@Column(name = "ID_PROFISSAO", precision = 3, scale = 0)
	private Long idProfissao;
	
	@Column(name = "ID_MUNICIPIO_NASCIMENTO", precision = 7, scale = 0)
	private Long idMunicipioNascimento;
	
	@Column(name = "NR_MATRICULA_SIAPE", length = 10)
	private String nrMatriculaSiape;
	
	@Column(name = "NM_FUNCIONARIO", nullable = false, length = 150)
	private String nmFuncionario;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_NASCIMENTO", length = 7)
	private Date dtNascimento;
	
	@Column(name = "ST_SEXO", precision = 1, scale = 0)
	private Boolean stSexo;
	
	@Column(name = "CS_GRUPO_SANGUINEO", length = 1)
	private String csGrupoSanguineo;
	
	@Column(name = "CS_FATOR_RH", length = 1)
	private String csFatorRh;
	
	@Column(name = "CS_COR", length = 1)
	private String csCor;
	
	@Column(name = "CS_ESTADO_CIVIL", length = 1)
	private String csEstadoCivil;
	
	@Column(name = "NM_PAI", length = 150)
	private String nmPai;
	
	@Column(name = "NM_MAE", length = 150)
	private String nmMae;
	
	@Column(name = "ST_REGISTRO", nullable = false, length = 1)
	private String stRegistro;
	
	@Column(name = "ID_PESSOA", nullable = false)
	private Long pessoa;
	
	@Transient
	private FuncionarioDocumento funcionarioDocumento;

	public Long getIdFuncionario() {
		return this.idFuncionario;
	}

	public void setIdFuncionario(Long idFuncionario) {
		this.idFuncionario = idFuncionario;
	}

	public Long getIdTratamento() {
		return this.idTratamento;
	}

	public void setIdTratamento(Long idTratamento) {
		this.idTratamento = idTratamento;
	}

	public Long getIdProfissao() {
		return this.idProfissao;
	}

	public void setIdProfissao(Long idProfissao) {
		this.idProfissao = idProfissao;
	}

	public Long getIdMunicipioNascimento() {
		return this.idMunicipioNascimento;
	}

	public void setIdMunicipioNascimento(Long idMunicipioNascimento) {
		this.idMunicipioNascimento = idMunicipioNascimento;
	}

	public String getNrMatriculaSiape() {
		return this.nrMatriculaSiape;
	}

	public void setNrMatriculaSiape(String nrMatriculaSiape) {
		this.nrMatriculaSiape = nrMatriculaSiape;
	}

	public Date getDtNascimento() {
		return this.dtNascimento;
	}

	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}

	public Boolean getStSexo() {
		return this.stSexo;
	}

	public void setStSexo(Boolean stSexo) {
		this.stSexo = stSexo;
	}

	public String getCsGrupoSanguineo() {
		return this.csGrupoSanguineo;
	}

	public void setCsGrupoSanguineo(String csGrupoSanguineo) {
		this.csGrupoSanguineo = csGrupoSanguineo;
	}

	public String getCsFatorRh() {
		return this.csFatorRh;
	}

	public void setCsFatorRh(String csFatorRh) {
		this.csFatorRh = csFatorRh;
	}

	public String getCsCor() {
		return this.csCor;
	}

	public void setCsCor(String csCor) {
		this.csCor = csCor;
	}

	public String getCsEstadoCivil() {
		return this.csEstadoCivil;
	}

	public void setCsEstadoCivil(String csEstadoCivil) {
		this.csEstadoCivil = csEstadoCivil;
	}

	public String getNmPai() {
		return this.nmPai;
	}

	public void setNmPai(String nmPai) {
		this.nmPai = nmPai;
	}

	public String getNmMae() {
		return this.nmMae;
	}

	public void setNmMae(String nmMae) {
		this.nmMae = nmMae;
	}

	public String getStRegistro() {
		return this.stRegistro;
	}

	public void setStRegistro(String stRegistro) {
		this.stRegistro = stRegistro;
	}

	public String getNmFuncionario() {
		return nmFuncionario;
	}

	public void setNmFuncionario(String nmFuncionario) {
		this.nmFuncionario = nmFuncionario;
	}

	public Long getPessoa() {
		return pessoa;
	}

	public void setPessoa(Long pessoa) {
		this.pessoa = pessoa;
	}

	public FuncionarioDocumento getFuncionarioDocumento() {
		return funcionarioDocumento;
	}

	public void setFuncionarioDocumento(FuncionarioDocumento funcionarioDocumento) {
		this.funcionarioDocumento = funcionarioDocumento;
	}

	public void setFuncionarioDocumento(
			List<FuncionarioDocumento> listaFuncionarioDocumento) {
		// TODO Auto-generated method stub
		
	}
}
package br.gov.mi.sip.corp.rhmi;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(schema="CORP_RHMI",name = "FUNCIONARIO_DOCUMENTO")
public class FuncionarioDocumento implements java.io.Serializable {

	private static final long serialVersionUID = -689430893376394766L;
	
	@Id
	@Column(name = "ID_FUNCIONARIO_DOCUMENTO", unique = true, nullable = false, precision = 22, scale = 0)
	@SequenceGenerator(name="SQ_ID_FUNCIONARIO_DOCUMENTO",sequenceName="CORP_RHMI.ID_FUNCIONARIO_DOCUMENTO",allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SQ_ID_FUNCIONARIO_DOCUMENTO")
	private Long idFuncionarioDocumento;
	
	@Column(name = "ID_FUNCIONARIO", nullable = false)
	private Long funcionario;
	
	@Column(name = "ID_TIPO_DOCUMENTO", nullable = false, precision = 10, scale = 0)
	private Long idTipoDocumento;
	
	@Column(name = "ID_UF", precision = 2, scale = 0)
	private Long idUf;
	
	@Column(name = "ID_MUNICIPIO", precision = 7, scale = 0)
	private Long idMunicipio;
	
	@Column(name = "NR_DOCUMENTO", nullable = false, length = 30)
	private String nrDocumento;
	
	@Column(name = "NR_SECAO", precision = 5, scale = 0)
	private Long nrSecao;
	
	@Column(name = "NR_ZONA", precision = 5, scale = 0)
	private Long nrZona;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_EMISSAO", length = 7)
	private Date dtEmissao;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_VALIDADE", length = 7)
	private Date dtValidade;
	
	@Column(name = "ST_REGISTRO", nullable = false, length = 1)
	private String stRegistro;
	
	@Column(name = "DS_ORGAO_EMISSOR", nullable = true, length = 25)
	private String dsOrgaoEmissor;
	
	@Column(name = "DS_OBSERVACOES", nullable = true)
	private String dsObservacoes;

	public FuncionarioDocumento() {
	}


	public Long getIdFuncionarioDocumento() {
		return this.idFuncionarioDocumento;
	}

	public void setIdFuncionarioDocumento(Long idFuncionarioDocumento) {
		this.idFuncionarioDocumento = idFuncionarioDocumento;
	}

	public Long getFuncionario() {
		return this.funcionario;
	}

	public void setFuncionario(Long funcionario) {
		this.funcionario = funcionario;
	}

	public Long getIdTipoDocumento() {
		return this.idTipoDocumento;
	}

	public void setIdTipoDocumento(Long idTipoDocumento) {
		this.idTipoDocumento = idTipoDocumento;
	}

	public Long getIdUf() {
		return this.idUf;
	}

	public void setIdUf(Long idUf) {
		this.idUf = idUf;
	}

	public Long getIdMunicipio() {
		return this.idMunicipio;
	}

	public void setIdMunicipio(Long idMunicipio) {
		this.idMunicipio = idMunicipio;
		
	}

	public String getNrDocumento() {
		return this.nrDocumento;
	}

	public void setNrDocumento(String nrDocumento) {
		this.nrDocumento = nrDocumento;
	}

	public Long getNrSecao() {
		return this.nrSecao;
	}

	public void setNrSecao(Long nrSecao) {
		this.nrSecao = nrSecao;
	}

	public Long getNrZona() {
		return this.nrZona;
	}

	public void setNrZona(Long nrZona) {
		this.nrZona = nrZona;
	}

	public Date getDtEmissao() {
		return this.dtEmissao;
	}

	public void setDtEmissao(Date dtEmissao) {
		this.dtEmissao = dtEmissao;
	}

	public Date getDtValidade() {
		return this.dtValidade;
	}

	public void setDtValidade(Date dtValidade) {
		this.dtValidade = dtValidade;
	}

	public String getStRegistro() {
		return this.stRegistro;
	}

	public void setStRegistro(String stRegistro) {
		this.stRegistro = stRegistro;
	}

	public String getDsOrgaoEmissor() {
		return dsOrgaoEmissor;
	}

	public void setDsOrgaoEmissor(String dsOrgaoEmissor) {
		this.dsOrgaoEmissor = dsOrgaoEmissor;
	}


	public String getDsObservacoes() {
		return dsObservacoes;
	}


	public void setDsObservacoes(String dsObservacoes) {
		this.dsObservacoes = dsObservacoes;
	}

}
o que eu tentei foi:
public List<Funcionario> filtrarPesquisaDocumento(String numeroDocumento) {
Session s = (Session) entityManager.getDelegate();
Criteria criteria = s.createCriteria(Funcionario.class);
criteria.alias("FuncionarioDocumento","ft");		
criteria.add(Restrictions.ilike("ft.nrDocumento", numeroDocumento ,MatchMode.ANYWHERE));
return criteria.list();
}
R

Primeiro você precisa arrumar essas entidades:
Na entidade Funcionario, faça assim:

// ...
    // Transiente significa que o hibernate tem que ignorar esse field.
    // @Transient  
    // private FuncionarioDocumento funcionarioDocumento;  

    @OneToMany(mappedBy="funcionario")
    private List&lt;FuncionarioDocumento&gt; documentos;

// ...

Na entidade FuncionarioDocumento, faça assim:

// ...
   // @Column(name = "ID_FUNCIONARIO", nullable = false)  
   // private Long funcionario; 

   @ManyToOne
   @JoinColumn(name="id_funcionario")
   private Funcionario funcionario;
// ...

Assim, o hibernate vai saber como relacionar essas duas entidades.

Seu criteria pode ficar assim:

public List&lt;Funcionario&gt; filtrarPesquisaDocumento(String numeroDocumento) {  
   Session s = (Session) entityManager.getDelegate();  

   Criteria criteria = s.createCriteria(Funcionario.class).createAlias("documentos","doc", JoinType.INNER_JOIN);          
   criteria.add(Restrictions.ilike("doc.nrDocumento", numeroDocumento ,MatchMode.ANYWHERE));  
   criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

   return criteria.list();  
}
D

SHOW DE BOLA!!! valeu …funcionou perfeitamente!!!

R

Legal. Muito bem.

Agora edita o primeiro post e coloca “[RESOLVIDO]” no assunto para as outras pessoas verem mais rápido. :slight_smile:

Criado 3 de julho de 2015
Ultima resposta 3 de jul. de 2015
Respostas 5
Participantes 2