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?
