IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Erreur au moment de l'insertion d'un objet dans une table


Sujet :

Java EE

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    le probleme vient tres exactement du : em.persist(intervention);
    quand j'evite d'inserer l'idSpeaker dans la table, le tout fonction mais quand je veux inserer l'idSpeaker c'est la que sa coince et je comprend pas pourquoi

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    bonjour a tous, apres 3h de recherche j'ai peut etre trouvé une solution mais je n'arrive pas a la mettre en place.
    Afin d'eviter que cette erreur ne s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of
    je dois désactiver la refléxivité d'hibernate, mais je ne sais pas comment faire et ou il faut aller. J'espere que quelqu'un a deja eu ce probleme et qu'il a reussi le resoudre.

    En attendant je vous remercie

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    bon j'ai resolu mon probleme.
    Je met la reponse au cas ou quelqu'un aurait le meme probleme.

    Etant donné la relation qu'il y a entre le Speaker et l'intervention (un speaker fait 0, 1 ou * intervention et une intervention est faite par un est un seul speaker).
    Dans ma classe Intervention j'ai mis int idSpeaker au lieu de Speaker idSpeaker (maintenant le nom de l'attribut n'est pas tres explicite).
    Et quand j'ai voulu inserer dans ma table l'intervention la requete n'attendait pas un int mais un Speaker a cause de la relation. C'est la cause du plantage.
    Toutefois, je ne vois abolument pas le rapport entre mon erreur et l'exception PropertyAccessException.


    Merci a vous quand meme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] insertion de colonne supplementaire dans une table
    Par francis77777 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/03/2008, 09h07
  2. Réponses: 6
    Dernier message: 09/07/2007, 15h39
  3. [Débutant] Insertion d'un blob dans une table
    Par Rakken dans le forum SQL
    Réponses: 3
    Dernier message: 15/05/2007, 14h27
  4. [MySQL] Insertion de code HTML dans une table, avec UPDATE
    Par Daedalus31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/02/2007, 12h19
  5. Réponses: 7
    Dernier message: 27/01/2006, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo