[ RESOLVIDO ]org.hibernate.PropertyAccessException Novamente

À 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:

[code]@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
}
[/code]

E sua respectiva DAO:

[code]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&lt;tab_func&gt; getLista() {
    List&lt;tab_func&gt; result = null;
    Criteria filtro = s.createCriteria(tab_func.class);
    filtro.addOrder(Order.asc("codfunc"));
    result = filtro.list();
    return result;
}

@Override
public List&lt;tab_func&gt; 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;
}

}[/code]

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

Ajuda ai.

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()).

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

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.

É, 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)

Interessante essa forma ai, não conhecia.

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

Ae mano, olha o que eu achei :slight_smile:

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

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

Fez o que ?

Coloquei o cascade nas propriedades o @ManyToOne

Verificou o mappedBy tambem ?

O mappedBy não é aceito no @ManyToOne

a ta, entendi, c ta usando many

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’.

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

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

tab_func:

[code]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;
      }
      }
      [/code]

tab_afas (Esta acessa a tab_func):

[code]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;
      }
      }
      [/code]

Ae, la na

sequenceName = "ponto.seq_tabfunc"

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

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.