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

Hibernate Java Discussion :

update qui ne se commit pas


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut update qui ne se commit pas
    Bonjour,
    Apres avoir mis en place les fonctions pour ajouter et supprimer un enregistrement en base via hibernate, je tente actuellement d'effectuer le update.
    La table que je souhaite mettre à jour se compose comme ceci :

    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping package="fr.sdis44.annu.hibernate">
    	<class name="UtilisateurProfil" table="COMPTE_PROFIL" lazy="true">
    		<composite-id class="fr.sdis44.annu.hibernate.compositeKeys.UtilisateurProfilPK" name="Id">
    			<key-many-to-one
    				column="ID_COMPTE"
    				name="IdUtilisateur"
    				class="Utilisateur"
    			 />
    			<key-many-to-one
    				column="ID_PROFIL"
    				name="IdProfil"
    				class="Profil"
    			 />
    		</composite-id>
    		<property
    			column="DATE_FIN"
    			length="7"
    			name="DateFin"
    			not-null="false"
    			type="date"
    		 />
    		<property
    			column="COMMENTAIRE"
    			length="30"
    			name="Commentaire"
    			not-null="false"
    			type="string"
    		 />
    		<property
    			column="DATE_DEBUT"
    			length="7"
    			name="DateDebut"
    			not-null="false"
    			type="date"
    		 />
    		<property
    			column="TS_COMPTE_PROFIL"
    			length="7"
    			name="TsUtilisateurProfil"
    			not-null="true"
    			type="date"
    		 />
    	</class>
    </hibernate-mapping>
    l'id est composé d'un objet Profil et d'un objet Utilisateur.

    ma servlet
    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
    58
    59
    60
    61
    62
    63
    64
        /** MODIFICATION DES APPLICATIONS **/
        if (Action.MODIFIER.equals(action)) {
          System.out.println("Modification des applications du membres");
          Utilisateur utilisateur = (Utilisateur)request.getSession().getAttribute("utilisateur");
     
          UtilisateurApplication sonAppli = (UtilisateurApplication)request.getSession().getAttribute("sonAppli");
          UtilisateurApplication sonAppliOld = sonAppli;
     
          System.out.println("userName= "+utilisateur.getNom());
     
     
          Profil prof = (Profil)ProfilDAO.getInstance().findProfById(request.getParameter("profils"));
          System.out.println("profilsModif= "+prof.getId());
     
          UtilisateurProfilPK key = new UtilisateurProfilPK();
          UtilisateurProfil sonProfilVoulu = new UtilisateurProfil();
     
          key.setIdProfil(prof);
          key.setIdUtilisateur(utilisateur);
     
          sonProfilVoulu.setCommentaire("test update");
          sonProfilVoulu.setDateDebut(new Date());
          sonProfilVoulu.setDateFin(new Date());
          sonProfilVoulu.setId(key);
          sonProfilVoulu.setTsUtilisateurProfil(new Date());
          sonProfilVoulu.getId().setIdProfil(prof);
          sonProfilVoulu.getId().setIdUtilisateur(utilisateur);
          System.out.println("(UP)sonProfVoulu - prof: "+sonProfilVoulu.getId().getIdProfil().getId());
          System.out.println("(UP)sonProfVoulu - util: "+sonProfilVoulu.getId().getIdUtilisateur().getId());
     
          Profil monProfActuel = UtilisateurApplicationDAO.getInstance().findProfil(utilisateur.getId(), sonAppli.getId().getIdApplication().getId());
          System.out.println("(Profil)monProfActuel: "+monProfActuel.getId());
     
     
          key.setIdProfil(monProfActuel);
          key.setIdUtilisateur(utilisateur);
          UtilisateurProfil sonProfilActuel = (UtilisateurProfil)UtilisateurProfilDAO.getInstance().findUpById(key);
          System.out.println("(UP)sonProfActuel: "+sonProfilActuel.getId().getIdProfil().getId());
     
     
     
     
     
          String sonCommentaire = request.getParameter("comment");
     
     
     
          Application appli = ApplicationDAO.getInstance().findAppById(sonAppli.getId().getIdApplication().getId());
          sonAppli.setCommentaire(sonCommentaire);
     
          try {
            FormulaireUtilisateurServices.getInstance().updateApplication(sonAppliOld,sonAppli);
            sonProfilVoulu.getId().setIdProfil(prof);
            System.out.println("FormApp - verif sonProfVoulu "+sonProfilVoulu.getId().getIdProfil().getId());
            System.out.println("FormApp - verif sonProfActuel "+sonProfilActuel.getId().getIdProfil().getId());
            FormulaireUtilisateurServices.getInstance().updateProfilApplication(utilisateur, sonProfilVoulu,sonProfilActuel);
     
            response.sendRedirect("resultatApplication.jsp");
            return;
          } catch (Exception e) {
            request.setAttribute("exception", e);
            getServletContext().getRequestDispatcher(JSP_PATH+"resultatApplication.jsp").forward(request, response);
          }
        }

    FormulaireUtilisateurService

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     /**
       * met à jour l'application pour l'utilisateur courant
       * @param appli
       * @param utilisateur
       * @throws Exception
       */
      public void updateApplication(UtilisateurApplication sonAppliOld, UtilisateurApplication sonAppli ) throws Exception{
          logger.debug("updateApplication");
          Session sessionHibernate = HibernateUtil.currentSession();
          Transaction transaction = null;
     
          try{
            logger.debug("Modification de la base");
            try {
                System.out.println("MAJApp0");
                //System.out.println("id:"+appli.getId());
                //System.out.println("user:"+utilisateur.getNom());
                transaction = dataBaseUtilisateurServices.updateApplicationIntoDB(sonAppliOld,sonAppli);
                logger.debug("Commit transaction ...");
                transaction.commit();
                System.out.println("MAJApp1");
            }catch (Exception e) {
              logger.error("Erreur JDBC");
              throw e;
            }
     
     
          }catch (Exception e) {
            if (transaction != null) {
              logger.debug("Rollback transaction ...");
              transaction.rollback();
            }  
              logger.debug("OK");
     
            e.printStackTrace();
            throw e;
          }
          finally {
            HibernateUtil.closeSession();
          }
        } 
     
      public void updateProfilApplication(Utilisateur util,UtilisateurProfil sonProfilVoulu, UtilisateurProfil sonProfilActuel) throws Exception{
          logger.debug("updateProfilApplication");
          Session sessionHibernate = HibernateUtil.currentSession();
          Transaction transaction = sessionHibernate.beginTransaction();
     
          try{
            logger.debug("Modification de la base");
            try {
                System.out.println("MAJApp0");
                //System.out.println("id:"+appli.getId());
                //System.out.println("user:"+utilisateur.getNom());
                System.out.println("FormUtiServ - verif sonProfVoulu "+sonProfilVoulu.getId().getIdProfil().getId());
                System.out.println("FormUtiServ - verif sonProfActuel "+sonProfilActuel.getId().getIdProfil().getId());
                transaction = dataBaseUtilisateurServices.updateProfilApplicationIntoDB(util,sonProfilVoulu, sonProfilActuel);
                logger.debug("Commit transaction ...");
     
                //transaction.commit();
                sessionHibernate.flush();
                System.out.println("MAJApp1");
            }catch (Exception e) {
              logger.error("Erreur JDBC");
              throw e;
            }
     
          }catch (Exception e) {
            if (transaction != null) {
              logger.debug("Rollback transaction ...");
              transaction.rollback();
            }  
              logger.debug("OK");
     
            e.printStackTrace();
            throw e;
          }
          finally {
            HibernateUtil.closeSession();
          }
        }

    databaseUtilisateurService
    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
      /**
       * met à jour  l'application pour cet utilisateur
       * @param appli
       * @param utilisateur
       * @throws org.hibernate.HibernateException
       */
      public Transaction updateApplicationIntoDB(UtilisateurApplication sonAppliOld,UtilisateurApplication sonAppli) throws org.hibernate.HibernateException {
        logger.debug("FormulaireUtilisateurServices.updateApplicationIntoDB");
        Transaction transaction = null;
     
     
     
        sonAppliOld.setCommentaire(sonAppli.getCommentaire());
        sonAppliOld.setTsUtilisateurApplication(new Date());
        //sonAppliOld.setDateDebut(sonAppli.getDateDebut());
        //sonAppliOld.setDateFin(sonAppli.getDateFin());
     
        transaction = UtilisateurApplicationDAO.getInstance().update(sonAppliOld);
     
        return transaction;
     
      }  
     
      /**
       * met à jour  le profil de l'application pour cet utilisateur
       * @param utilisateur
       * @param sonProfil
       * @throws org.hibernate.HibernateException
       */
      public Transaction updateProfilApplicationIntoDB(Utilisateur util,UtilisateurProfil sonProfilVoulu, UtilisateurProfil sonProfilActuel) throws org.hibernate.HibernateException {
        logger.debug("FormulaireUtilisateurServices.updateProfilApplicationIntoDB");
        Transaction transaction = null;
     
        System.out.println("DatabaseUti - sonProfActuel "+sonProfilActuel.getId().getIdProfil().getId());
        System.out.println("DatabaseUti - sonProfVoulu "+sonProfilVoulu.getId().getIdProfil().getId());
        sonProfilActuel.setId(sonProfilVoulu.getId());
        sonProfilActuel.setTsUtilisateurProfil(new Date());
        sonProfilActuel.setCommentaire("ouarf");
        sonProfilActuel.setDateDebut(sonProfilVoulu.getDateDebut());
        sonProfilActuel.setDateFin(sonProfilVoulu.getDateFin());
     
     
     
        //UtilisateurProfilDAO.getInstance().updateUp(sonProfilActuel,sonProfilVoulu);
        transaction = UtilisateurProfilDAO.getInstance().update(sonProfilActuel);
     
        return transaction;
     
      }

    Le fait est qu'actuellement, la modification pour l'application(UtilisateurApplication) se fait mais en ce qui concerne le profil (UtilisateurProfil) , rien ne se passe.

    Je sais pas si ca a un rapport mais j'ai ce message lors de l'execution:
    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
    15:53:31,329 INFO [Tomcat] - Problem with checked-in Statement, discarding.
     java.lang.NullPointerException
    	at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
    	at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
    	at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
    	at com.mchange.v2.c3p0.stmt.GooGooStatementCache.refreshStatement(GooGooStatementCache.java:604)
    	at com.mchange.v2.c3p0.stmt.GooGooStatementCache.checkinStatement(GooGooStatementCache.java:236)
    	at com.mchange.v2.c3p0.impl.NewPooledConnection.checkinStatement(NewPooledConnection.java:282)
    	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close(NewProxyPreparedStatement.java:1807)
    	at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:534)
    	at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:269)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    	at fr.sdis44.annu.hibernate.services.FormulaireUtilisateurServices.updateApplication(FormulaireUtilisateurServices.java:450)
    	at fr.sdis44.annu.servlet.FormulaireApplicationServlet.doPost(FormulaireApplicationServlet.java:306)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at com.jalios.jcms.servlet.FriendlyURLFilter.doFilter(FriendlyURLFilter.java:115)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Thread.java:619)
    Il pointe sur le commit apparement...

    Si quelqu'un avait une petit idée, merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    Il me semble que c'est un bug du driver JDBC Oracle, au vue du message d'erreur. Je pense que le driver utilisé est un peu ancien, et que les nouvelles versions corrige ce problème.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Hm je pensais avoir le dernier mais je vais aller vérifier , merci.


    wait & see

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Bon, je viens de vérifier, j'ai la version ojdbc14.jar, ce qui semble être la derniere pour une base oracle 8i

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    OK,
    Mais personnellement, j'aurais dit que pour utiliser Oracle 8, il fallait mieux utiliser classes12.zip comme driver.
    Je me trompe?

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Hm j'avoue que je sais pas trop , on m'a refilé ce driver là en fait :o

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    bon comme je n'y arrivais toujours pas j'ai enchainé un delete + save , là ca fonctionne
    Par contre j'ai toujours le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Problem with checked-in Statement, discarding.
    ainsi qu'un nouveau message comme quoi ma transaction n'a pas été démarrée correctement :o

    PS: j'ai essayé avec le driver classe12 et ça change rien

Discussions similaires

  1. [MySQL] UPDATE qui ne se fait pas
    Par VoteForMe dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/09/2008, 13h42
  2. [MySQL] MySQL Update qui ne se fait pas
    Par philippef dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 10/07/2008, 17h30
  3. [MySQL] une requête Update qui ne s'exécute pas
    Par DeveX dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/07/2008, 13h37
  4. [SQL] Requête UPDATE qui ne s'exécute pas avec PHP
    Par xplose dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/08/2007, 09h42
  5. [VB.NET] Update qui ne se réalise pas
    Par totoche dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/05/2005, 11h16

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