These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 
Author Message
 Post subject: erreur "Could not execute JDBC batch update"
PostPosted: Thu May 18, 2006 5:04 am 
Newbie

Joined: Fri Mar 31, 2006 11:20 am
Posts: 5
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp

Hibernate version : 2.0

Full stack trace of any exception that occurs :
net.sf.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at net.sf.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:63)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:30)
at net.sf.hibernate.impl.BatcherImpl.convert(BatcherImpl.java:325)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:134)
at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:60)
at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:57)
at net.sf.hibernate.impl.BatcherImpl.prepareBatchStatement(BatcherImpl.java:110)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:456)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:438)
at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2391)
at net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1820)
at net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1577)
at net.sf.hibernate.impl.SessionImpl.iterate(SessionImpl.java:1601)
at net.sf.hibernate.impl.QueryImpl.iterate(QueryImpl.java:27)
at integration.insertion.DataInsertion.getFabriquantFromDatabase(DataInsertion.java:205)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at integration.insertion.DataInsertion.saveObject(DataInsertion.java:113)
at integration.capitoul.DataDistribution.distributionPlateformes(DataDistribution.java:198)
at integration.capitoul.DataDistribution.distribute(DataDistribution.java:113)
at integration.insertion.Principal.main(Principal.java:99)
Caused by: Batch entry 0 insert into categorie_param (categorie_param_nom, categorie_param_domaine, categorie_param_id) values ( was aborted. Call getNextException() to see the cause.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:107)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:127)
... 21 more


Name and version of the database you are using : postgresql 7.4.2

Bonjour!

J'ai un souci incompréhensible avec un programme d'insersion. Je l'ai fait il y a un mois et il marchait très bien et lorsque j'ai voulu le réutiliser, il ne marchait plus!
Le code qui foire est celui-ci :

public Fabriquant getFabriquantFromDatabase (Object fabriquant) {
Query query = null;
Iterator it_query = null;
Fabriquant result = null;

try {
query = this.sessionFactory.createQuery ("from Fabriquant as Fab where Fab.fabriquantNom = :fabriquant");
query.setString ("fabriquant", ((Fabriquant)fabriquant).getFabriquantNom ());
it_query = query.iterate ();
if (it_query.hasNext()) {
result = (Fabriquant)it_query.next ();
}

} catch (HibernateException e) {
System.out.println ("HIBERNATE : Problème pour retrouver le fabriquant "
+ ((Fabriquant)fabriquant).getFabriquantNom ()
+ " dans la base de données");
e.printStackTrace ();
}

return result;
}

Il s'agit de vérifier si un objet Fabriquant, instancié à partir des données d'un document Excel, est déjà dans la base ou pas.
Ceci marche très bien pour les 3 premiers Fabriquant de mon xls, mais au 4eme, il me sort l'exception que j'ai copié plus haut "could not execute JDBC batch update".
Il est à noter que l'exception apparait lorsque le Fabriquant en question n'est pas déjà présent dans la base (les premiers le sont déjà)! De plus, le même cas de figure apparaît pour d'autres objets à insérer, de la même manière!


Voila, j'ai essayé de résumer la situation.
Si vous connaissez cette erreur ou que vous avez une solution à mon problème, ca serait gentil de m'en faire part!

Merci d'avance!


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 18, 2006 5:37 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Salut,

Il faut que tu donne également le mapping pour les autres tableaux (categorie, domain).
L'exception se passe qu'on tu ecris dans le tableau categorie_param .

Peut-etre un mapping m:n sans inverse="true" sur une coté de relation.

Sebastian

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 22, 2006 5:14 am 
Newbie

Joined: Fri Mar 31, 2006 11:20 am
Posts: 5
Merci de m'avoir répondu Sebastian !

En fait, je ne comprends vraiment pas ce qu'il se passe car lorsque je teste le programme sur une autre base, il ne me sort pas la même erreur.
En plus, j'ai testé une autre version de ce programme sur d'autres données (mais ou rien n'a été changer niveau connexion et mapping des données) et il marche très bien.
Ce qui est étrange c'est que l'erreur ne se produit qu'après la rencontre d'une donnée qui n'est pas encore dans la base : par exemple, dans mes données j'insère 3 capteurs de type 'Inconnu' (qui est déjà dans la base puis un nouveau capteur, puis encore un capteur Inconnu. Et bien, c'est après le nouveau capteur qu'il me dit qu'il ne peut pas retrouver le capteur 'Inconnu' alors qu'il l'a trouvé au début.
J'ai vérifié avec un debug si j'avais toujours une connexion sur ma base et c'est bien le cas, donc je ne sais pas d'où ca peut venir.

Je vais continuer à me prendre a tête...


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 24, 2006 4:54 am 
Proxool Developer
Proxool Developer

Joined: Tue Aug 26, 2003 10:42 am
Posts: 373
Location: Belgium
Ton stacktrace indique:

Code:
net.sf.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
...
Caused by: Batch entry 0 insert into categorie_param (categorie_param_nom, categorie_param_domaine, categorie_param_id) values ( was aborted.

Le record que tu ajoutes viole donc une contrainte d'integrite de ta table categorie_param..
Check le schema de ta db ainsi que les donnees que tu inseres et tu auras rapidemment la reponse.


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 29, 2006 8:19 am 
Newbie

Joined: Fri Mar 31, 2006 11:20 am
Posts: 5
C'est bon, j'ai réglé le problème : merci bertrand, c'était bien ca : il y avait un souci avec la table categorie_param.

Merci beaucoup!
A+


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.