Erro ao realizar consultas em classes com relacionamentos no Hibernate[RESOLVIDO]

Olá pessoal!

Estou com dificuldades no Hibernate para realizar consultas, já procurei aqui no forum, mas não consegui resolver o problema. Quando tento fazer uma consulta na tabela funcionário, por exemplo, esta dando o seguinte erro:

[color=red]Hibernate: /* from Funcionario */ select funcionari0_.cpf_fun as cpf1_5_, funcionari0_.nome as nome5_, funcionari0_.foto as foto5_, funcionari0_.rg as rg5_, funcionari0_.org_emissor as org5_5_, funcionari0_.pis as pis5_, funcionari0_.ctps as ctps5_, funcionari0_.te as te5_, funcionari0_.nacionalidade as nacional9_5_, funcionari0_.naturalidade as natural10_5_, funcionari0_.endereco as endereco5_, funcionari0_.complemento as complem12_5_, funcionari0_.bairro as bairro5_, funcionari0_.cidade as cidade5_, funcionari0_.estado as estado5_, funcionari0_.cep as cep5_, funcionari0_.dt_nasc as dt17_5_, funcionari0_.TelRes as TelRes5_, funcionari0_.TelCel as TelCel5_, funcionari0_.email as email5_, funcionari0_.cargo as cargo5_, funcionari0_.escolaridade as escolar22_5_, funcionari0_.dt_admi as dt23_5_, funcionari0_.dt_demi as dt24_5_, funcionari0_.salario as salario5_, funcionari0_.cont_sind as cont26_5_, funcionari0_.status_func as status27_5_, funcionari0_1_.atividade as atividade7_, funcionari0_2_.login as login8_, funcionari0_2_.senha as senha8_, funcionari0_2_.tp_usu as tp4_8_, funcionari0_2_.tema as tema8_, funcionari0_2_.bloq as bloq8_, case when funcionari0_1_.cpf_fun is not null then 1 when funcionari0_2_.cpf_fun is not null then 2 when funcionari0_.cpf_fun is not null then 0 end as clazz_ from Funcionario funcionari0_ left outer join Professor funcionari0_1_ on funcionari0_.cpf_fun=funcionari0_1_.cpf_fun left outer join Usuario funcionari0_2_ on funcionari0_.cpf_fun=funcionari0_2_.cpf_fun
Exception in thread “main” org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of PacoteModelo.Funcionario.FrequenciaFunc
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
at org.hibernate.loader.Loader.doQuery(Loader.java:729)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at PacotePercistencia.Consulta.main(Consulta.java:31)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
… 16 more
Java Result: 1[/color]

Classe de Consulta: Consulta.java

[code]import PacoteModelo.Aluno;
import PacoteModelo.FrequenciaFunc;
import PacoteModelo.Funcionario;
import PacoteModelo.Responsavel;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Transaction;
import org.hibernate.Session;
import org.hibernate.Query;

/**
*

  • @author Bruno
    */
    public class Consulta {

    public static void main(String [] args) {

     Session sessao = HibernateUtility.getSession();
     Transaction tx = sessao.beginTransaction();
     Query select = sessao.createQuery("from Funcionario");
    
     select.setFirstResult(0);
     List objetos = select.list();
     Iterator item = objetos.iterator();
     while (item.hasNext()) {
            Funcionario r = (Funcionario) item.next(); 
            System.out.println("---------------------------------------");
            System.out.println(r.getBairro()); 
            System.out.println("---------------------------------------");
         } 
    tx.commit();
    sessao.close();
    

    }

}[/code]

Classe Funcionario.java

[code]package PacoteModelo;

import java.util.Date;

public class Funcionario {

private String Nome;
private String Foto;
private String CPF;
private String RG;
private String orgaoEmissor;
private String PIS;
private String NCarTrab;
private String TEleitoral;
private String Nacionalidade;
private String Naturalidade;
private String End;
private String Comp;
private String Bairro;
private String Cidade;
private String Estado;
private int CEP;
private Date DtNasc;
private String TelRes;
private String TelCel;
private String Email;
private String Cargo;
private String Escolaridade;
private Date DtAdm;
private Date DtDem;
private float Sal;
private float ContrSind;
private int Status;
 
private FrequenciaFunc[] frequenciaFunc;
 
public boolean verificaFunc(int cpf) {
    return false;
}

public String getNome() {
    return Nome;
}

public void setNome(String Nome) {
    this.Nome = Nome;
}

public String getFoto() {
    return Foto;
}

public void setFoto(String Foto) {
    this.Foto = Foto;
}

public String getCPF() {
    return CPF;
}

public void setCPF(String CPF) {
    this.CPF = CPF;
}

public String getRG() {
    return RG;
}

public void setRG(String RG) {
    this.RG = RG;
}

public String getOrgaoEmissor() {
    return orgaoEmissor;
}

public void setOrgaoEmissor(String orgaoEmissor) {
    this.orgaoEmissor = orgaoEmissor;
}

public String getPIS() {
    return PIS;
}

public void setPIS(String PIS) {
    this.PIS = PIS;
}

public String getNCarTrab() {
    return NCarTrab;
}

public void setNCarTrab(String NCarTrab) {
    this.NCarTrab = NCarTrab;
}

public String getTEleitoral() {
    return TEleitoral;
}

public void setTEleitoral(String TEleitoral) {
    this.TEleitoral = TEleitoral;
}

public String getNacionalidade() {
    return Nacionalidade;
}

public void setNacionalidade(String Nacionalidade) {
    this.Nacionalidade = Nacionalidade;
}

public String getNaturalidade() {
    return Naturalidade;
}

public void setNaturalidade(String Naturalidade) {
    this.Naturalidade = Naturalidade;
}

public String getEnd() {
    return End;
}

public void setEnd(String End) {
    this.End = End;
}

public String getComp() {
    return Comp;
}

public void setComp(String Comp) {
    this.Comp = Comp;
}

public String getBairro() {
    return Bairro;
}

public void setBairro(String Bairro) {
    this.Bairro = Bairro;
}

public String getCidade() {
    return Cidade;
}

public void setCidade(String Cidade) {
    this.Cidade = Cidade;
}

public String getEstado() {
    return Estado;
}

public void setEstado(String Estado) {
    this.Estado = Estado;
}

public int getCEP() {
    return CEP;
}

public void setCEP(int CEP) {
    this.CEP = CEP;
}

public Date getDtNasc() {
    return DtNasc;
}

public void setDtNasc(Date DtNasc) {
    this.DtNasc = DtNasc;
}

public String getTelRes() {
    return TelRes;
}

public void setTelRes(String TelRes) {
    this.TelRes = TelRes;
}

public String getTelCel() {
    return TelCel;
}

public void setTelCel(String TelCel) {
    this.TelCel = TelCel;
}

public String getEmail() {
    return Email;
}

public void setEmail(String Email) {
    this.Email = Email;
}

public String getCargo() {
    return Cargo;
}

public void setCargo(String Cargo) {
    this.Cargo = Cargo;
}

public String getEscolaridade() {
    return Escolaridade;
}

public void setEscolaridade(String Escolaridade) {
    this.Escolaridade = Escolaridade;
}

public Date getDtAdm() {
    return DtAdm;
}

public void setDtAdm(Date DtAdm) {
    this.DtAdm = DtAdm;
}

public Date getDtDem() {
    return DtDem;
}

public void setDtDem(Date DtDem) {
    this.DtDem = DtDem;
}

public float getSal() {
    return Sal;
}

public void setSal(float Sal) {
    this.Sal = Sal;
}

public float getContrSind() {
    return ContrSind;
}

public void setContrSind(float ContrSind) {
    this.ContrSind = ContrSind;
}

public FrequenciaFunc[] getFrequenciaFunc() {
    return frequenciaFunc;
}

public void setFrequenciaFunc(FrequenciaFunc[] frequenciaFunc) {
    this.frequenciaFunc = frequenciaFunc;
}

public int getStatus() {
    return Status;
}

public void setStatus(int Status) {
    this.Status = Status;
}

}[/code]

Classe de Frequencia do Funcionario: FrequenciaFunc.java

[code]import java.util.Date;

public class FrequenciaFunc {

private String cpf;

    private Date Data;
 
private Date Hora;
 
private Funcionario funcionario;

public Date getData() {
    return Data;
}

public void setData(Date Data) {
    this.Data = Data;
}

public Date getHora() {
    return Hora;
}

public void setHora(Date Hora) {
    this.Hora = Hora;
}

public Funcionario getFuncionario() {
    return funcionario;
}

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

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

}[/code]

Mapeamento da classe Funcionario.java: Funcionario.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="PacoteModelo.Funcionario"> <id name="CPF" column="cpf_fun" type="string"> <generator class="assigned"> <param name="CPF">CPF</param> </generator> </id> <set name="FrequenciaFunc" lazy="true" inverse="true"> <key column="cpf_fun" not-null="true"/> <one-to-many class="PacoteModelo.FrequenciaFunc"/> </set> <property name="Nome" column="nome"/> <property name="Foto" column="foto"/> <property name="RG" column="rg"/> <property name="orgaoEmissor" column="org_emissor"/> <property name="PIS" column="pis"/> <property name="NCarTrab" column="ctps"/> <property name="TEleitoral" column="te"/> <property name="Nacionalidade" column="nacionalidade"/> <property name="Naturalidade" column="naturalidade"/> <property name="End" column="endereco"/> <property name="Comp" column="complemento"/> <property name="Bairro" column="bairro"/> <property name="Cidade" column="cidade"/> <property name="Estado" column="estado"/> <property name="CEP" column="cep"/> <property name="DtNasc" column="dt_nasc"/> <property name="TelRes" column="TelRes"/> <property name="TelCel" column="TelCel"/> <property name="Email" column="email"/> <property name="Cargo" column="cargo"/> <property name="Escolaridade" column="escolaridade"/> <property name="DtAdm" column="dt_admi"/> <property name="DtDem" column="dt_demi"/> <property name="Sal" column="salario"/> <property name="ContrSind" column="cont_sind"/> <property name="Status" column="status_func"/> </class> </hibernate-mapping>

Mapeamento da classe FrequenciaFunc.java: FrequenciaFunc.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="PacoteModelo.FrequenciaFunc" table="frequencia_func"> <id name="cpf" column="cpf_fun"> <generator class="foreign"> <param name="property">funcionario</param> </generator> </id> <many-to-one name="funcionario" column="cpf_fun" not-null="false" insert="false" update="false" /> <property name="Data" column="data_freq_func"/> <property name="Hora" column="hora"/> </class> </hibernate-mapping>

Desde já muito obrigado, estou postando também o meu DER para maior esclarecimento.


Olá,

olhando rápido, a primeira coisa a ser feita é trocar seu array de FrequenciaFunc, por um Set de FrequenciaFunc.

[]´s

Olá Rodrigo!

Eu fiz as seguintes mudanças, estou iniciando com o Hibernate, mas continua o mesmo erro.

Funcionario.java

package PacoteModelo;

import java.util.Date;

public class Funcionario {
	 
    private String Nome;
    private String Foto;
    private String CPF;
    private String RG;
    private String orgaoEmissor;
    private String PIS;
    private String NCarTrab;
    private String TEleitoral;
    private String Nacionalidade;
    private String Naturalidade;
    private String End;
    private String Comp;
    private String Bairro;
    private String Cidade;
    private String Estado;
    private String CEP;
    private Date DtNasc;
    private String TelRes;
    private String TelCel;
    private String Email;
    private String Cargo;
    private String Escolaridade;
    private Date DtAdm;
    private Date DtDem;
    private float Sal;
    private float ContrSind;
    private int Status;
	 
	private FrequenciaFunc frequenciaFunc;

...

    public FrequenciaFunc getFrequenciaFunc() {
        return frequenciaFunc;
    }

    public void setFrequenciaFunc(FrequenciaFunc frequenciaFunc) {
        this.frequenciaFunc = frequenciaFunc;
    }

   ...	 
}

Na classe funcionário, vc deve colocar um Set de FrequencioFunc, já que pelo seu mapeamento, cada funcionário tem varios ‘FrequencioFunc’.

Então coloque na sua classe funcionário:

private Set<FrequenciaFunc> frequenciaFunc;

Se atente aos nomes corretos entre o que foi delcarado na classe e o que está no mapeamento.

Olá Rodrigo!

Agora está funcionando!

Muito obrigado pela ajuda!