Erreur au moment de l'insertion d'un objet dans une table
Bonjour a tous, je fais appelle a vous car j'ai grand besoin de votre aide, car cela va faire un peu plus de 6h que je poireaute sur un probleme qui me rend completement dingue. J'ai beau cherché dans les forums, et faire ce que les gens disent, rien ne marche, je ne cesse de lire mon code encore et encore et encore, meme chose avec ce que m'indique la console mais je ne comprend absolument pas pourquoi on m'indique le probleme suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
Grave: "Servlet.service()" pour la servlet com.supinfo.notetonsta.servlet.RegisterInterventionServlet a généré une exception
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.supinfo.notetonsta.entity.Speaker.idSpeaker
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:678)
at com.supinfo.notetonsta.dao.jpa.JpaInterventionDao.addIntervention(JpaInterventionDao.java:26)
at com.supinfo.notetonsta.servlet.RegisterInterventionServlet.doPost(RegisterInterventionServlet.java:65)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.supinfo.notetonsta.entity.Speaker.idSpeaker
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:227)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3850)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3558)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:203)
at org.hibernate.engine.ForeignKeys$Nullifier.isNullifiable(ForeignKeys.java:159)
at org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:91)
at org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:69)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:310)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:672)
... 20 more
Caused by: java.lang.IllegalArgumentException: Can not set int field com.supinfo.notetonsta.entity.Speaker.idSpeaker to java.lang.Integer
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)
... 38 more |
et voici les codes concernés par ce probleme :
Intervention.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Entity
@Table(name="INTERVENTIONS")
public class Intervention implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idIntervention;
private String subject;
private String description;
private String beginDate;
private String endDate;
private String status;
@ManyToOne(targetEntity=Speaker.class) // le ManyToOne fait toujours reference à l'entité
@JoinColumn(name="speaker_fk")
private int speaker;
@ManyToOne(targetEntity=Campus.class)
@JoinColumn(name="campus_fk")
private Campus campus; |
la methode qui permet d'enregistrer l'intervention dans sa table : (methode qui se situe dans JpaInterventionDao)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Override
public Intervention addIntervention(Intervention intervention) {
// TODO Auto-generated method stub
Intervention result = null;
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
em.persist(intervention);
em.getTransaction().commit();
result = intervention;
} finally {
if(em.getTransaction().isActive())
em.getTransaction().rollback();
em.close();
}
return result;
} |
et enfin voici le doPost de la servlet qui enregistre l'intervention apres avoir remplit le formulaire (cette servlet ce nomme RegisterInterventionServlet)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Intervention intervention = new Intervention();
Campus campus = new Campus(request.getParameter("campus"));
intervention.setSubject(request.getParameter("subject"));
intervention.setCampus(campus);
intervention.setBeginDate(request.getParameter("from"));
intervention.setEndDate(request.getParameter("to"));
intervention.setDescription(request.getParameter("description"));
intervention.setStatus(request.getParameter("status"));
// intervention.setIdSpeaker(4);
interventionDao.addIntervention(intervention);
} |
les erreurs s'affiche lorsque j'enregistre l'intervention dans une table c'est a dire a cette ligne :
Code:
interventionDao.addIntervention(intervention);
le probleme c'est que je vois vraiment pas le rapport entre cecii : Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.supinfo.notetonsta.entity.Speaker.idSpeaker
et le fait que j'enregistre l'intervention.
J'espere que vous avez deja rencontrer ce genre de probleme et que vous pourrez m'aider a le resoudre car cette erreur commence a me fatiguer . Meme si vous n'etes pas sur, n'hesiter pas a poster vos commentaires car je pense que cela me sera tres utile.
En attendant je vous remercie d'avance pour vos interventions
Merci