Erro na inserção de dados no banco de dados:Can not set int field... to java.lang.String

9 respostas
jsfprimefaceshibernatejava
L

Olá pessoal!
Estou tentando inserir dados em uma tabela de relacionamento muitos para muitos, a aplicação é um sistema escolar, e estou inserindo uma turma e seus respectivos alunos no banco de dados, para isso estou usando o picklist do primefaces para puxar todos os alunos cadastrados no banco de dados, e selecionar só os que eu quero que façam parte da turma. Eu consigo inserir todas as informações normalmente, no console do eclipse eu consigo identificar o insert que ele dá na table Turma, só que na hora de dar o insert na tabela de relacionamento Turma_Alunos, apresenta o seguintes Erro: Caused by: java.lang.IllegalArgumentException: Can not set int field br.com.digitaltech.model.Aluno.id to java.lang.String

**Erro completo**
>     GRAVE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=j_idt18:j_idt34, Message=javax.persistence.RollbackException: Error while committing the transaction
>     ago 28, 2016 7:58:28 PM com.sun.faces.context.AjaxExceptionHandlerImpl log
>     GRAVE: javax.persistence.RollbackException: Error while committing the transaction
>     javax.faces.event.AbortProcessingException: javax.persistence.RollbackException: Error while committing the transaction
>         at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
>         at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
>         at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:772)
>         at javax.faces.component.UICommand.broadcast(UICommand.java:300)
>         at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
>         at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
>         at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
>         at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
>         at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>         at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
>         at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082)
>         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623)
>         at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>         at java.lang.Thread.run(Unknown Source)
>     Caused by: javax.persistence.RollbackException: Error while committing the transaction
>         at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
>         at br.com.digitaltech.dao.TurmaDAO.insert(TurmaDAO.java:26)
>         at br.com.digitaltech.business.TurmaSB.insert(TurmaSB.java:16)
>         at br.com.digitaltech.view.TurmaMB.doInsert(TurmaMB.java:46)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>         at java.lang.reflect.Method.invoke(Unknown Source)
>         at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
>         at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
>         at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
>         ... 29 more
>     Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.digitaltech.model.Aluno.id
>         at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)
>         at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1112)
>         at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:81)
>         ... 39 more
>     Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.digitaltech.model.Aluno.id
>         at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
>         at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
>         at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3852)
>         at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3560)
>         at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
>         at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
>         at org.hibernate.type.EntityType.getIdentifier(EntityType.java:449)
>         at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:132)
>         at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:816)
>         at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1204)
>         at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
>         at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
>         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
>         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:183)
>         at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
>         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
>         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
>         at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
>         at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
>         at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
>         ... 39 more
>     Caused by: java.lang.IllegalArgumentException: Can not set int field br.com.digitaltech.model.Aluno.id to java.lang.String
>         at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
>         at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
>         at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
>         at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(Unknown Source)
>         at sun.reflect.UnsafeIntegerFieldAccessorImpl.get(Unknown Source)
>         at java.lang.reflect.Field.get(Unknown Source)
>         at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
>         ... 58 more

View
package br.com.digitaltech.view;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import org.primefaces.model.DualListModel;

import lombok.Getter;
import lombok.Setter;
import br.com.digitaltech.business.AlunoSB;
import br.com.digitaltech.business.CursoSB;
import br.com.digitaltech.business.TurmaSB;
import br.com.digitaltech.enums.PeriodoEnum;
import br.com.digitaltech.model.Aluno;
import br.com.digitaltech.model.Curso;
import br.com.digitaltech.model.Turma;

@Getter
@Setter
@ManagedBean
public class TurmaMB {
    private Turma edit = new Turma();
    private List<Curso> cursos;
    private PeriodoEnum[] periodos;
    private DualListModel<Aluno> alunos = null;
    private CursoSB cursoSB = new CursoSB();
    private TurmaSB turmaSB = new TurmaSB();
    private AlunoSB alunoSB = new AlunoSB();
    
    @PostConstruct
    public void doSelectMenu() {
        periodos = PeriodoEnum.values();
        cursos = cursoSB.findAll();
        List<Aluno> source = alunoSB.findAll();
        List<Aluno> target = new ArrayList<Aluno>();
        alunos = new DualListModel<Aluno>(source, target);
    }

    public void doInsert() {
        edit.setAlunos(alunos.getTarget());
        turmaSB.insert(edit);

        FacesContext ctx = FacesContext.getCurrentInstance();
        ctx.addMessage(null, new FacesMessage("Turma Inserida com Sucesso."));
    }
}

Classe Turma

package br.com.digitaltech.model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.com.digitaltech.enums.PeriodoEnum;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "TBL_TURMA")
public class Turma {
    @Column(name = "ID_TURMA")
    @Id
    @GeneratedValue
    private int id;

    @Column(name = "TX_NOME")
    private String nome;

    @JoinColumn(name = "ID_CURSO")
    @ManyToOne
    private Curso curso = new Curso();

    @Column(name="NR_PERIODO")
    @Enumerated(EnumType.ORDINAL)
    private PeriodoEnum periodo;

    // Relacionamentos N para N

    @JoinTable(name = "TBL_TURMA_ALUNO", joinColumns = { @JoinColumn(name = "ID_TURMA") }, inverseJoinColumns = { @JoinColumn(name = "ID_ALUNO") })
    @ManyToMany
    private List<Aluno> alunos;
}

Classe Alunos
package br.com.digitaltech.model;

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

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "TBL_ALUNO")
public class Aluno {
    @Column(name = "ID_ALUNO")
    @Id
    @GeneratedValue
    private int id;

    @JoinColumn(name = "ID_CURSO")
    @ManyToOne
    private Curso curso;

    @JoinColumn(name = "ID_MODULO")
    @ManyToOne
    private Modulo modulo;

    @Column(name = "TX_NOME_ALUNO")
    private String nome;

    @Column(name = "TX_CPF")
    private String cpf;

    @Column(name = "DT_DATA_NASCIMENTO")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;

    @Column(name = "DT_DATA_MATRICULA")
    @Temporal(TemporalType.DATE)
    private Date dataMatricula;
    
    @Column(name = "TX_TELEFONE")
    private String telefone;

    @Column(name = "TX_EMAIL")
    private String email;

    @Column(name = "TX_ENDERECO")
    private String endereco;

    @Transient
    private int impressaoDigital;

    @Transient
    private int faltas;

    // Relacionamento N pra N

    @JoinTable(name = "TBL_TURMA_ALUNO",
            joinColumns = { @JoinColumn(name = "ID_ALUNO") },
            inverseJoinColumns = { @JoinColumn(name = "ID_TURMA") })
    @ManyToMany
    private List<Turma> turmas;
    
    @JoinTable(name = "TBL_ALUNO_MATERIA",
            joinColumns = { @JoinColumn(name = "ID_ALUNO") },
            inverseJoinColumns = { @JoinColumn(name = "ID_MATERIA") })
    @ManyToMany
    private List<Materia> materias;
}

Será que está faltando algo?

9 Respostas

J

Ola @LeoRDS Tenta mudar o id do aluno para Integer

L

Não deu certo cara, continua apresentando o mesmo erro

J

Cara eu ainda não usei esse método de fazer os @Setters e @Getters por annotation então faz um teste pra mim faz o encapsulamento manual mesmo das entidades e testa, pq esse erro aqui indica que ele não esta conseguindo fazer o reflexão por algum motivo, acredito que por falta do encapsulamento dos atributos das entidades
could not get a field value by reflection getter of br.com.digitaltech.model.Aluno.id

L

Tentei isso também e nada, continua no mesmo erro.

M

Experimenta gerar os Getters e Setters normalmente. Sem usar o Lombok.

4

Poderia me informar o tipo de dados que esta registrado no banco de dados para este campo?

L

No banco de dados o campo id do aluno está como int

4

Opa tudo bem? faça o seguinte @LeoRDS coloque o id como Short, é bastante comum ocorrer problemas com ID’s do tipo int utilizando hibernate, recomendo e utilizo Short. :wink:

L

Só pra dar uma conclusão pro problema…Eu alterei o tipo dos dados dos id’s também, mas o problema mesmo era que eu precisava de uma classe Converter, pra converter os valores vindos da página como String para um Objeto do do tipo Aluno

Criado 28 de agosto de 2016
Ultima resposta 4 de set. de 2016
Respostas 9
Participantes 4