Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1522 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  hibernate grammar exception (renommé avec mon 3e post)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

hibernate grammar exception (renommé avec mon 3e post)

n°1725033
burgergold
5$? va chez l'diable!
Posté le 26-04-2008 à 21:30:54  profilanswer
 

je cherche la facon "clean" de créer ma méthode createConnection. D'un coté, eclipse me dit dans ma classe PostgreSQLDAOFactory de pas la mettre static alors que dans un DAO quelconque où j'ai besoin d'une connection, ca me demande de la mettre static. Je suis donc pris dans ce cercle vicieux sans savoir la bonne facon de le faire
 

Code :
  1. public class PostgreSQLDAOFactory extends DAOFactory {
  2. public static Connection createConnection() throws Exception {
  3.  try {
  4.   Connection c = DriverManager.getConnection("jdbc:postgresql:vhl", "monid", "monpassword" );
  5.      return c;
  6.  }
  7.  catch (SQLException e) {
  8.   throw e;
  9.  }
  10. }
  11. }


 

Code :
  1. public abstract class DAOFactory {
  2. public static final int POSTGRESQL = 1;
  3. public abstract Connection createConnection() throws Exception ;
  4. public abstract LeagueDAO getLeagueDAO();
  5. public abstract DivisionDAO getDivisionDAO();
  6. public static DAOFactory getDAOFactory(int whichFactory) {
  7.  switch (whichFactory) {
  8.   case POSTGRESQL:
  9.    return new PostgreSQLDAOFactory();
  10.   default:
  11.    return null;
  12.  }
  13. }
  14. }


 

Code :
  1. public class PostgreSQLLeagueDAO implements LeagueDAO {
  2. public void createLeague(String name) throws Exception {
  3.  Connection c = PostgreSQLDAOFactory.createConnection();
  4. }
  5. }


Message édité par burgergold le 27-04-2008 à 04:50:03
mood
Publicité
Posté le 26-04-2008 à 21:30:54  profilanswer
 

n°1725035
el muchach​o
Comfortably Numb
Posté le 26-04-2008 à 21:43:17  profilanswer
 

La façon clean, c'est de ne pas faire directement du JDBC mais de passer par un framework ORM style Hibernate.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1725036
burgergold
5$? va chez l'diable!
Posté le 26-04-2008 à 21:48:13  profilanswer
 

ouais jai l'intention d'utiliser Hibernate ou iBatis dans un avenir prochain mais pour le moment, j'y vais plus par développement itératif. Je fais pas souvent de java et je suis pas mal rouiller dans les mutliples patterns alors j'aimerais débuter sans ceux-ci puisque je ne les connais pas encore

n°1725072
burgergold
5$? va chez l'diable!
Posté le 27-04-2008 à 04:48:51  profilanswer
 

bon finalement je fais un petit tuto hibernate et je vois que c'est pas trop compliqué
 
apres avoir réglé plusieurs erreurs, on dirait que hibernate que génère un insert invalide :/
 

Code :
  1. <hibernate-mapping>
  2. <class name="TO.League" table="LEAGUE">
  3.  <id name="id" column="LEAGUE_ID">
  4.   <generator class="native"/>
  5.  </id>
  6.  <property name="name" type="string" column="LEAGUE_NAME"/>
  7. </class>
  8. </hibernate-mapping>


 

Code :
  1. org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
  2. at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
  3. at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
  4. at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
  5. at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
  6. at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
  7. at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
  8. at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
  9. at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
  10. at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
  11. at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
  12. at DAO.PostgreSQLLeagueDAO.createLeague(PostgreSQLLeagueDAO.java:20)
  13. at Test.main(Test.java:12)
  14. Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into LEAGUE (LEAGUE_NAME, LEAGUE_ID) values (NHL, 4) a été annulé. Appeler getNextException pour en connaître la cause.
  15. at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2537)
  16. at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
  17. at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:351)
  18. at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
  19. at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
  20. at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
  21. ... 9 more


 
devrait pas y avoir des "" ou '' autour de ma string "NHL" dans le insert?

n°1725147
burgergold
5$? va chez l'diable!
Posté le 27-04-2008 à 14:57:42  profilanswer
 

up

n°1725195
burgergold
5$? va chez l'diable!
Posté le 27-04-2008 à 18:32:13  profilanswer
 

je crois que le probleme vient de ma DB postgresql mais je trouve pas le correctif nécessaire
 
j'ai 1 sequence et 1 table, la table ayant 1 integer et 1 character varying
 
dans mes logs de db:  
 
2008-04-27 11:18:12 EDT LOG:  loaded library "$libdir/plugins/plugin_debugger.dll"
2008-04-27 11:18:14 EDT ERROR:  relation "league" does not exist
2008-04-27 11:18:14 EDT STATEMENT:  insert into LEAGUE (LEAGUE_NAME, LEAGUE_ID) values ($1, $2)

n°1725211
el muchach​o
Comfortably Numb
Posté le 27-04-2008 à 19:08:32  profilanswer
 

Je doute que ton PostgreSQL soit en cause si tu as récupéré une version officielle.

 

Par contre, LEAGUE_ID est probablement une séquence incrémentée automatiquement par Hibernate. Quand je lis ton XML de mapping (en toute honnêteté, je ne connais pas Hibernate, mais c'est ce que j'utiliserais), je comprends que LEAGUE_ID est un id qui est géré comme une séquence, voire une clef primaire, par Hibernate.

 

Par conséquent, si ce que je soupçonne est correct, il ne faut pas passer de valeur pour LEAGUE_ID dans ta requête, Postgres doit gérer cela de façon transparente. En fait, les id ne doivent pas apparaitre dans tes insert. Ou alors tu voulais faire un update et pas un insert.

 

Au passage, si tu fais du Java 5 (1.5) et non du Java 2 (1.4.2), tu as tout intérêt à utiliser les annotations plutôt que des fichiers XML.

Message cité 1 fois
Message édité par el muchacho le 27-04-2008 à 19:19:41

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1725227
burgergold
5$? va chez l'diable!
Posté le 27-04-2008 à 20:01:31  profilanswer
 

ok cétait une question de case sensitive
quand j'avais mon mapping en majuscule et mes champs dans ma DB en majuscule, ca fonctionnait pas
 
jai tout mis en minuscule et maintenant ca passe

n°1725228
burgergold
5$? va chez l'diable!
Posté le 27-04-2008 à 20:03:05  profilanswer
 

el muchacho a écrit :


Au passage, si tu fais du Java 5 (1.5) et non du Java 2 (1.4.2), tu as tout intérêt à utiliser les annotations plutôt que des fichiers XML.


 
Java 6
 
les tuto disait d'utiliser les xml plutot que les properties, jvais regarder ce qu'est un annotation pour voir, merci du conseil

n°1725249
el muchach​o
Comfortably Numb
Posté le 27-04-2008 à 20:54:09  profilanswer
 

burgergold a écrit :

ok cétait une question de case sensitive
quand j'avais mon mapping en majuscule et mes champs dans ma DB en majuscule, ca fonctionnait pas

 

jai tout mis en minuscule et maintenant ca passe


Tiens, curieux, sachant que le SQL est case insensitive. Et tu passes quand même une valeur pour le league_id ? Que se passe-t'il si tu l'enlèves ?


Message édité par el muchacho le 27-04-2008 à 20:57:43

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
mood
Publicité
Posté le 27-04-2008 à 20:54:09  profilanswer
 

n°1725256
burgergold
5$? va chez l'diable!
Posté le 27-04-2008 à 21:15:05  profilanswer
 

non je passe pas de valeur pour league_id
dans mon mapping de la table, j'associe mon league_id avec une sequence (sequence_league_id) qui est défini dans postgresql pour etre auto-increment

n°1725280
el muchach​o
Comfortably Numb
Posté le 27-04-2008 à 22:06:45  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  hibernate grammar exception (renommé avec mon 3e post)

 

Sujets relatifs
Protéger mon champs $_POST dans mon panierTomcat exception
Exception provoqués par ApplicationRessources[PHP] Formulaire + transfert de données par post + codage de porc
Floating Point Exception[XMLHttpRequest] Passage de tableau en paramètre POST possible ?
Version d'instance, suivi/journalisationMise à jour base données par ajax avec variables POST
Questions sur swing, awt, ... Jscrollpane, voir 7 ème postgestion de la session Hibernate dans un WebService Axis 1.2
Plus de sujets relatifs à : hibernate grammar exception (renommé avec mon 3e post)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR