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

4 respostas
brunodila

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
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();
    }

}
Classe 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 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;
    }
     
}
Classe de Frequencia do Funcionario: FrequenciaFunc.java
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;
    }
     
}
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.

4 Respostas

rodrigo_gomes

Olá,

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

[]´s

brunodila

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;
    }

   ...	 
}
rodrigo_gomes

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.

brunodila

Olá Rodrigo!

Agora está funcionando!

Muito obrigado pela ajuda!

Criado 3 de setembro de 2008
Ultima resposta 7 de set. de 2008
Respostas 4
Participantes 2