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 :

sauvgarder les objets qui n'ont pas été sauvgarder


Sujet :

Hibernate Java

  1. #1
    Membre du Club Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Points : 56
    Points
    56
    Par défaut sauvgarder les objets qui n'ont pas été sauvgarder
    Bonjour ,

    je veux sauvgader des données se trouvant dans un fichiers xml, et j'utilise pour cela hibernate3. alors j'ai ecrit le code suivant (il n'est pas complet..):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ......
    Session xmlSession = session.getSession(EntityMode.DOM4J);
    		Transaction tx=session.beginTransaction();
     
     
    		for (Iterator it=contact.iterator(); it.hasNext(); ) {
    			xmlSession.saveOrUpdate("dao.ContactDao",it.next());
                    }	................
    mais ceci m'affiche l'erreur suivante :
    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
    ..............Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into contact (contactPrenom, contactnom, nomEpouse, profession, details, adresseContact, companyId, contactId) values (?, ?, ?, ?, ?, ?, ?, ?)
    - SQL Error: 1048, SQLState: 23000
    - Column 'contactNom' cannot be null
    - Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
    	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:343)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    	at dao.Mapping.<init>(Mapping.java:59)
    	at dao.Mapping.main(Mapping.java:81)
    Caused by: java.sql.BatchUpdateException: Column 'contactNom' cannot be null
    	at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:657)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
    	... 9 more........
    j'ai essayé de catcher l'erreur mais ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (Iterator it=contact.iterator(); it.hasNext(); ) {
    			Object c=it.next();
    			try{
    				xmlSession.saveOrUpdate("dao.ContactDao",it.next());
    				log.info("session succes.......");
    			}
    			catch(Exception e){
    				log.info("erreur de sauvgarde.......");
    				save.add(c);
    			}
    j'ai essayé avec catch(Throwable)et aussi avec RuntimeException toujours rien
    ..
    est ce que quelqu'un peut m'aider ?

    cordialement

  2. #2
    Membre du Club Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    je viens de trouver la solution ..j'ai juste fait entrer

    transaction.commit();
    session.close();
    dans la clause try

  3. #3
    Membre du Club Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    j'ai changé mon code :
    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
    List contact=doc.selectNodes("//contact");
     
    		Session session =null; //sessionFactory.openSession();
     
    		Session xmlSession = null;//session.getSession(EntityMode.DOM4J);
    		Transaction tx=null;
     
     
    		for (Iterator it=contact.iterator(); it.hasNext(); ) {
    			//Object c=it.next();
    			//tx=session.beginTransaction();
    			Object obj =it.next();
     
    			try{
    				session=sessionFactory.openSession();
    				xmlSession=session.getSession(EntityMode.DOM4J);
    				tx=session.beginTransaction();
    				xmlSession.saveOrUpdate("dao.ContactDao",obj);
    				tx.commit();
    			}
    			catch(Exception  e){
    				log.info("erreur de sauvgarde.......");
    				save.add(obj);
    			}
    			finally{
    				session.close();
    			}
     
    		}
    mais cette erreur s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    18 mai 2007 18:43:42 dao.Mapping <init>
    INFO: erreur de sauvgarde.......
    - Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)....
    normale qu'il entre dans la clause catch mais pourquoi il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .....org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    	at org.hibernate.exceptio........
    ????

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Essaye comme ca
    changements :
    - une seule ouverture de session/transaction
    - un seul commit global si tout est passé
    - rollback global en cas de probleme
    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
     
    List contact=doc.selectNodes("//contact");
     
    		Session session =null; //sessionFactory.openSession();
     
    		Session xmlSession = null;//session.getSession(EntityMode.DOM4J);
    		Transaction tx=null;
    		Object obj = null;
    		try {
    			session=sessionFactory.openSession();
    			xmlSession=session.getSession(EntityMode.DOM4J);
    			tx=session.beginTransaction();
    			for (Iterator it=contact.iterator(); it.hasNext(); ) {
    				obj=it.next();		
    				xmlSession.saveOrUpdate("dao.ContactDao",obj);
    			}
    			tx.commit();
    		}catch(Exception  e){
    			log.info("erreur de sauvgarde.......");
    			tx.rollback();
    			save.add(obj);
    		}finally{
    			session.close();
    		}
     
    	}
    Le save.add(obj), il fait quoi?

  5. #5
    Membre du Club Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    j'ai essayé ce que tu as proposé mais la meme exception s'affiche toujours ..

    et (save est de type Vector) sert a stocker les object qui n'ont pas été sauvgardés dans la base de données..

    en fait moi ce que je veux faire c'est enregister des donées venant d'un fichiers XML, et les données qui ne sont pas conforme je les stockes dans un Vector et ensuite je les affiches dans une fenetre pour pouvoir les modifier et les réinjectées dans la base de données ..

    j'arrive pas à comprendre pourquoi meme si je catch l'exception elle continue de s'afficher !!!

  6. #6
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Ha, d'accord, j'avais pas compris ce que tu voulais faire et l'algo que je t'ai donné n'est pas valble pour ce que tu essaye de faire (puisqu'à la premiere donnée non valide, ca va faire un rollback global et dans ton vector, tu n'aura que la donnée qui aura provoqué le plantage)

    L'erreur en question arrive quand ta session est bloqué, ou que tu n'a plus de connection dispo (style tu en ouvres trop sans les fermer, ou y'a eu un plantage grave lors de l'insertion)

    Le mieux serait de tester tes données à part avant d'essayer de n'insérer que des données bien formatées...

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2008, 11h53
  2. Sélectionner les parents qui n'ont pas d'enfants roux
    Par MatthieuBrunet dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/05/2008, 13h17
  3. Réponses: 3
    Dernier message: 06/02/2008, 17h23
  4. Réponses: 6
    Dernier message: 11/07/2006, 10h04
  5. [XSL] Sélectionner les éléments qui n'ont pas un certain fils
    Par lebechen dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 05/07/2006, 17h54

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