[ RESOLVIDO ]org.hibernate.PropertyAccessException Novamente

28 respostas
Y

À pouco tempo eu consegui que meu problema com o PropertyAccessException fosse resolvido aqui no GUJ, porém ele apareceu de novo e eu não sei o que fazer novamente :oops:

Ele apareceu com classes dieferentes claro, mas eu ja revisei todo o código e não acho a origem do erro.

Erro:

Exception in thread "AWT-EventQueue-0" org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.inf.topsoft.Model.tab_func.codfunc
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
	at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3591)
	at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3307)
	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:512)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:80)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	at br.inf.topsoft.Dao.Tab_afasDao.Salvar(Tab_afasDao.java:25)
	at br.inf.topsoft.View.FrmLanAfas.btGravaActionPerformed(FrmLanAfas.java:166)
	at br.inf.topsoft.View.FrmLanAfas.access$100(FrmLanAfas.java:14)
	at br.inf.topsoft.View.FrmLanAfas$2.actionPerformed(FrmLanAfas.java:57)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6504)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6269)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4860)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field br.inf.topsoft.Model.tab_func.codfunc to java.lang.Integer
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
	at java.lang.reflect.Field.get(Field.java:372)
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32)
	... 65 more

Essa classe ai em cima que o "Caused by" acusa é a seguinte:

@Entity
@Table(name = "ponto.tab_func")
public class tab_func implements Serializable {

    @Id
    @GeneratedValue(generator = "ponto.seq_tabfunc", strategy = GenerationType.AUTO)
    @SequenceGenerator(name = "ponto.seq_tabfunc", sequenceName = "ponto.seq_tabfunc")
    @Column(unique = true, name = "codfunc", updatable = false)
    private Integer codfunc;// integer NOT NULL
    
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_parc.class)
    @JoinColumn(name="codparc", referencedColumnName="codparc", nullable=false)
    private tab_parc codparc;// integer NOT NULL
    
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_sind.class)
    @JoinColumn(name="codsind", referencedColumnName="codsind")
    private tab_sind codsind;// integer NOT NULL
    
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_ocup.class)
    @JoinColumn(name="codocup", referencedColumnName="codocup")
    private tab_ocup codocup;// integer NOT NULL
    
    @Column(name = "sal_base")
    private Float sal_base;// numeric(12,2)
    @Column(name = "sal_tipo")
    private Integer sal_tipo;// smallint, -- 1 - Mensalista    2 - Horista    3 - Diarista    4 - Comissinista
    @Column(name = "carga_horaria")
    private Float carga_horaria;// numeric(10,4)
//getters e setters
}

E sua respectiva DAO:

public class Tab_funcDao implements DaoController<tab_func> {

    Session s = HibernateUtil.getSessionFactory().openSession();
    Transaction t;

    @Override
    public void Salvar(tab_func obj) {
        t = this.s.beginTransaction();
        s.saveOrUpdate(obj);
        t.commit();
    }

    @Override
    public void Alterar(tab_func obj) {
        t = this.s.beginTransaction();
        s.saveOrUpdate(obj);
        t.commit();
    }

    @Override
    public void Deletar(tab_func obj) {
        t = this.s.beginTransaction();
        s.delete(obj);
        t.commit();
    }

    @Override
    public List<tab_func> getLista() {
        List<tab_func> result = null;
        Criteria filtro = s.createCriteria(tab_func.class);
        filtro.addOrder(Order.asc("codfunc"));
        result = filtro.list();
        return result;
    }

    @Override
    public List<tab_func> getLista(String filtro) {
        return null;
    }

    @Override
    public tab_func getUnico(Integer id) {
        tab_func p;
        Criteria filtro = s.createCriteria(tab_func.class);
        filtro.add(Restrictions.eq("codfunc ", id));
        p = (tab_func) filtro.uniqueResult();
        return p;
    }
}

Não sei exatamente se é esta classe que da erro...

Ajuda ai.

28 Respostas

Y

Agora eu tenho quase certeza que o erro esta na tab_func, pois todas as classes que usam dela pra preencher um JComboBox e resgatar o valor apresentam esse erro (Todas que usam o método getCodfunc()).

R

Yago, vamos fazer uns negocios e vamos ver se resolve.

  1. O que significa ponto.tab_func ? Nessa anotacao se detenha a informar somente o nome da tabela, acredito que esse ponto seja o squema ou algo do tipo, mude isso para somente name=“tab_func”. Depois veja se o problema persiste.
@Entity  
@Table(name = "tab_func")  
public class tab_func implements Serializable {
  1. O primeiro passo resolvendo ou nao, mantenha-o da forma como falei, agora parta para essa outra mudança.
@Id
@SequenceGenerator(name = "tab_func_generation", sequenceName = "seq_tabfunc", allocationSize = 1)   // Troquei a ordem do  SequenceGenerator
@GeneratedValue(generator = "tab_func_generation", strategy = GenerationType.AUTO)  // Troquei o nome do generator
@Column(name = "codfunc")  // Retire unique e updatable, primary keys por padrao ja levam esses atributos.
private Integer codfunc;

Testa ae =D

Y

Mesmo fazendo todos essas modificações ai continua com o mesmo erro :cry:

PS: Aquele ponto. é o schema sim, e se tirar ele o hibernate não acha, e como minha aplicação faz uma busca antes mesmo de iniciar a parte gráfica, ele trava logo no começo.

R

É, mas ta errado, nao sei como funciona no resto da aplicação, hehehehe…o squema se coloca assim:

@Table(name="tab_func", schema = "ponto")

Bom, o que nos resta entao é o google 8)

Y

Interessante essa forma ai, não conhecia.

Eu já procurei no Google, não achei nada que resolvesse o meu caso.

R

Ae mano, olha o que eu achei :slight_smile:

http://www.guj.com.br/java/57119-exception-hibernate-1n-resolvido

Y

Não deu… Eu ja tinha feito isso ai que ele mostrou.

R

Fez o que ?

Y

Coloquei o cascade nas propriedades o @ManyToOne

R

Verificou o mappedBy tambem ?

Y

O mappedBy não é aceito no @ManyToOne

R

a ta, entendi, c ta usando many

R

Voce pode fazer uma coisa ? voce pode postar TODA a sua classe tab_func ? e se tiver alguma classe que tenha ela no mapeamento tambem ?

Outra coisa, so pra lembrar, boas praticas na programacao Java, nomes de classe comecam com letra maiuscula, sao singular e nao usam _ ‘underline’.

R

verifica tambem se nao ta faltando algum getter ou setter nas suas classes.

Y

kkk Todo mundo fica me falando disso, mas não é culpa minha não, a empresa que eu trabalho que tem esse padrão.

Y

tab_func:

package br.inf.topsoft.Model;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * @since 1.0
 * @author Yago
 */
@Entity
@Table(name = "tab_func", schema="ponto")
public class tab_func implements Serializable {

    @Id
    @GeneratedValue(generator = "ponto.seq_tabfunc", strategy = GenerationType.AUTO)
    @SequenceGenerator(name = "ponto.seq_tabfunc", sequenceName = "ponto.seq_tabfunc")
    @Column(unique = true, name = "codfunc", updatable = false)
    private Integer codfunc;// integer NOT NULL
    
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_parc.class)
    @JoinColumn(name="codparc", referencedColumnName="codparc", nullable=false)
    private tab_parc codparc;// integer NOT NULL
    
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_sind.class)
    @JoinColumn(name="codsind", referencedColumnName="codsind")
    private tab_sind codsind;// integer NOT NULL
    
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_ocup.class)
    @JoinColumn(name="codocup", referencedColumnName="codocup")
    private tab_ocup codocup;// integer NOT NULL
    
    @Column(name = "sal_base")
    private Float sal_base;// numeric(12,2)
    @Column(name = "sal_tipo")
    private Integer sal_tipo;// smallint, -- 1 - Mensalista    2 - Horista    3 - Diarista    4 - Comissinista
    @Column(name = "carga_horaria")
    private Float carga_horaria;// numeric(10,4)

    /**
     * @return the codfunc
     */
    public Integer getCodfunc() {
        return codfunc;
    }
    
    public Integer getCodigo(){
        return codfunc;
    }

    /**
     * @param codfunc the codfunc to set
     */
    public void setCodfunc(int codfunc) {
        this.codfunc = codfunc;
    }

    /**
     * @return the codparc
     */
    public tab_parc getCodparc() {
        return codparc;
    }

    /**
     * @param codparc the codparc to set
     */
    public void setCodparc(tab_parc codparc) {
        this.codparc = codparc;
    }

    /**
     * @return the codsind
     */
    public tab_sind getCodsind() {
        return codsind;
    }

    /**
     * @param codsind the codsind to set
     */
    public void setCodsind(tab_sind codsind) {
        this.codsind = codsind;
    }

    /**
     * @return the codocup
     */
    public tab_ocup getCodocup() {
        return codocup;
    }

    /**
     * @param codocup the codocup to set
     */
    public void setCodocup(tab_ocup codocup) {
        this.codocup = codocup;
    }

    /**
     * @return the sal_base
     */
    public Float getSal_base() {
        return sal_base;
    }

    /**
     * @param sal_base the sal_base to set
     */
    public void setSal_base(Float sal_base) {
        this.sal_base = sal_base;
    }

    /**
     * @return the sal_tipo
     */
    public Integer getSal_tipo() {
        return sal_tipo;
    }

    /**
     * @param sal_tipo the sal_tipo to set
     */
    public void setSal_tipo(Integer sal_tipo) {
        this.sal_tipo = sal_tipo;
    }

    /**
     * @return the carga_horaria
     */
    public Float getCarga_horaria() {
        return carga_horaria;
    }

    /**
     * @param carga_horaria the carga_horaria to set
     */
    public void setCarga_horaria(Float carga_horaria) {
        this.carga_horaria = carga_horaria;
    }
}
Y

tab_afas (Esta acessa a tab_func):

package br.inf.topsoft.Model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * @since 1.0
 * @author Yago
 */
@Entity
@Table(name = "ponto.tab_afas")
public class tab_afas implements Serializable {

    @Id
    @GeneratedValue(generator = "ponto.seq_tabafas", strategy = GenerationType.AUTO)
    @SequenceGenerator(name = "ponto.seq_tabafas", sequenceName = "ponto.seq_tabafas")
    @Column(unique = true, name = "codafas", updatable = false)
    private Integer codafas;// integer NOT NULL, -- Código do afastamento
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= tab_func.class)
    @JoinColumn(name="funafas", referencedColumnName="codfunc", nullable=false)
    private Integer funafas;// integer,  //ERA AQUI O ERRO!!! FOI SÓ MUDAR O TIPO DA VARIAVEL PARA tab_func QUE FUNCIONOU
    @Column(name = "filafas")
    private String filafas;// character(3),
    @Column(name = "motafas")
    private Integer motafas;// integer DEFAULT 0, -- Motivo do afastamento
    @Column(name = "diaafas")
    private Integer diaafas;// integer,
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "dtiafas")
    private Date dtiafas;// date, -- Data inicial do afastamento
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "dtfafas")
    private Date dtfafas;// date, -- Data final do afastamento
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "opeafas")
    private Date opeafas;// date,
    @Column(name = "obsafas")
    private String obsafas;// text, -- Observação do afastamento

    /**
     * @return the codafas
     */
    public Integer getCodafas() {
        return codafas;
    }

    /**
     * @param codafas the codafas to set
     */
    public void setCodafas(Integer codafas) {
        this.codafas = codafas;
    }

    /**
     * @return the funafas
     */
    public Integer getFunafas() {
        return funafas;
    }

    /**
     * @param funafas the funafas to set
     */
    public void setFunafas(int funafas) {
        this.funafas = funafas;
    }

    /**
     * @return the filafas
     */
    public String getFilafas() {
        return filafas;
    }

    /**
     * @param filafas the filafas to set
     */
    public void setFilafas(String filafas) {
        this.filafas = filafas;
    }

    /**
     * @return the motafas
     */
    public Integer getMotafas() {
        return motafas;
    }

    /**
     * @param motafas the motafas to set
     */
    public void setMotafas(Integer motafas) {
        this.motafas = motafas;
    }

    /**
     * @return the diaafas
     */
    public Integer getDiaafas() {
        return diaafas;
    }

    /**
     * @param diaafas the diaafas to set
     */
    public void setDiaafas(Integer diaafas) {
        this.diaafas = diaafas;
    }

    /**
     * @return the dtiafas
     */
    public Date getDtiafas() {
        return dtiafas;
    }

    /**
     * @param dtiafas the dtiafas to set
     */
    public void setDtiafas(Date dtiafas) {
        this.dtiafas = dtiafas;
    }

    /**
     * @return the dtfafas
     */
    public Date getDtfafas() {
        return dtfafas;
    }

    /**
     * @param dtfafas the dtfafas to set
     */
    public void setDtfafas(Date dtfafas) {
        this.dtfafas = dtfafas;
    }

    /**
     * @return the opeafas
     */
    public Date getOpeafas() {
        return opeafas;
    }

    /**
     * @param opeafas the opeafas to set
     */
    public void setOpeafas(Date opeafas) {
        this.opeafas = opeafas;
    }

    /**
     * @return the obsafas
     */
    public String getObsafas() {
        return obsafas;
    }

    /**
     * @param obsafas the obsafas to set
     */
    public void setObsafas(String obsafas) {
        this.obsafas = obsafas;
    }
}
R

Ae, la na

sequenceName = "ponto.seq_tabfunc"

Tire o "ponto’ dai por favor, isso ai e so pra por o nome do sequence ‘-’

R

Opaaaaaaaaaa…entao ai pode ta o erro, na tabela tab_afas, nao tem nada referenciando tab_func =D

cria la

private tab_func tabFunc; e cria os getter / setter tambem, e verifica a anotacao.

Y

Tem também a tab_adia, que acessa a tab_func como a tab_afas, mas é quase a mesma coisa, e tem a tab_parc, uma tabela gigantesca que é acessada pela tab_func, mas nas partes que ele é executada não aparece erro nenhum, não achei necessário postar.

R

Essas classes que acessam a tab_func, tipo, se elas no banco possuem relacionamentos, obrigatoriamente precisam ser anotadas nas classes tambem entende ? tipo, se tab_afas tem uma chave estrangeira que aponta para tab_func, a classe tab_func precisa estar anotada na classe tab_afas.

Y

FUNCIONOU!! kkk

Era isso mesmo que vc disse, porém tinha a referência a tab_func na tab_afas com o @ManyToOne e tudo só que a variável era do tipo Integer como ta la em cima. Eu mudei somente isso (e modifiquei no getter e setter) e rodou perfeitamente (falta de atenção ou inteligencia, não sei).

Muito obrigado pela ajuda rof20004, ja tava com isso empacado a dois dias.

R

:lol:

R

Ja tinha imaginado que tinham pego no teu pe, por isso falei que tava so ‘Lembrando’ 8)

R

Yago Ernandes:
FUNCIONOU!! kkk

Era isso mesmo que vc disse, porém tinha a referência a tab_func na tab_afas com o @ManyToOne e tudo só que a variável era do tipo Integer como ta la em cima. Eu mudei somente isso (e modifiquei no getter e setter) e rodou perfeitamente (falta de atenção ou inteligencia, não sei).

Muito obrigado pela ajuda rof20004, ja tava com isso empacado a dois dias.

Outra coisa, voce colocou um objeto tab_func com nome funfas… o que isso tem a ver ??? o.O, boas praticas, sempre use nomes nas variaveis que deixem claro pra que serve e que o que ela é :evil:

Y

Haha, mas essa é outra “boa prática” da minha empresa. Sempre utilize os campos com o mesmo nome do campo da tabela.

funfas significa funcionario-afastamento, e esse nome estranho só é assim porque infelizmente não sou eu quem faz as tabelas aqui.

R

tenso…

Coloca no topico como resolvido pra ajudar a galera =D

Flw!

Y

Ah sim, é mesmo.

Flw

Criado 7 de março de 2013
Ultima resposta 7 de mar. de 2013
Respostas 28
Participantes 2