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 :

probleme de sauvegarde d'un objet


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut probleme de sauvegarde d'un objet
    Salut a tous ,
    j'ai rencontré un problème lors de la sauvegarde d'un objet dans ma base de donnée.
    voici le script de création de la base:
    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
     
    CREATE TABLE "utilisateurs"
    (
      nom character(20) NOT NULL,
      prenom character(20) NOT NULL,
      CONSTRAINT nom PRIMARY KEY (nom)
    )
    CREATE TABLE "historiqueUser"
    (
      "nomUser" character(20) NOT NULL,
      "action" character(20) NOT NULL,
      CONSTRAINT "historiqueUser_pkey" PRIMARY KEY (action, "nomUser"),
      CONSTRAINT "historiqueUser_nomUser_fkey" FOREIGN KEY ("nomUser")
          REFERENCES utilisateurs (nom) MATCH SIMPLE
         )
    comme vous pouvez le voir historiqueUser a une clé primaire qui se compose du champ action et de la clé etrangere nomUser.
    Lors de la sauvegarde d'un objet HistoriqueUser j'ai les exceptions 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
    Hibernate: insert into historiqueUser (action, nomUser) values (?, ?)
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
    	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
    	at test.mainClass.main(mainClass.java:26)
    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into historiqueUser (action, nomUser) values (temp, momo) a été annulé. Appeler getNextException pour en connaître la cause.
    	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2531)
    	at org.postgresql.core.v3.QueryExecutorImpl$1.handleError(QueryExecutorImpl.java:395)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1344)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:343)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2668)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    	... 8 more
    voila mes fichier de mapping
    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
    <?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="packageHibernate">
    	<class
    		name="Utilisateurs"
    		table="utilisateurs"
    	>
    		<meta attribute="sync-DAO">false</meta>
     
    		<meta attribute="sync-DAO">false</meta>
     
    		<id
    			name="name"
    			type="string"
    			column="nom"
    		>
     
    		</id>
     
    		<property
    			name="Prenom"
    			column="prenom"
    			type="string"
    			not-null="true"
    			length="20"
    		/>
     
     
    	</class>	
    </hibernate-mapping>
    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
    <?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="packageHibernate">
    	<class
    		name="HistoriqueUser"
    		table="historiqueUser"
    	>
    		<meta attribute="sync-DAO">false</meta>
    		<composite-id>
    			<key-property
    				name="Action"
    				column="action"
    				type="string"
    			/>
    			<key-many-to-one
    				name="NomUser"
    				class="Utilisateurs"
    				column="nomUser"
    			/>
    		</composite-id>
     
     
     
    	</class>	
    </hibernate-mapping>
    et mon .cfg
    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
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     
    <hibernate-configuration>
        <session-factory >
     
    		<!-- local connection properties -->
    		<property name="hibernate.connection.url">jdbc:postgresql://localhost/baseChat</property>
    		<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    		<property name="hibernate.connection.username">postgres</property>
    		<property name="hibernate.connection.password">motdepasse</property>
    		<!-- property name="hibernate.connection.pool_size"></property -->
     
    		<!-- dialect for PostgreSQL -->
            <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
     
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
              <mapping resource="packageHibernate/Utilisateurs.hbm.xml"/> 
               <mapping resource="packageHibernate/HistoriqueUser.hbm.xml"/> 
     
        </session-factory>
    </hibernate-configuration>
    et finalement le code qui pose probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Session mySession= HibernateUtil.currentSession(); 
     
    		Transaction tx =mySession.beginTransaction();
     
    		Utilisateurs u= (Utilisateurs) mySession.load(Utilisateurs.class,"momo");
    		HistoriqueUser hu=new HistoriqueUser();
    		hu.setNomUser(u);
    		hu.setAction("temp");
    	mySession.save(hu); // exception declenché ici
    		tx.commit();
    		mySession.close();
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    As-tu essayé de passer la requête à la main sous Postgres (insert into historiqueUser (action, nomUser) values (temp, momo)) ? Cela te donnera peut-être des éléments de réponse, car il s'agit visiblement d'une erreur de syntaxe SQL.

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    oui et ça a marché .

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    ok, alors il serait intéressant de pouvoir récupérer la next exception tel qu'indiqué dans la stack trace

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    et ça se fait comment?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    Tu peux créer une classe wrapper pour intercepter la méthode executeBatch() des Statement de postgres. Evidemment, cela nécessite de créer aussi une classe wrapper autour de l'objet Connection pour la création de ton statement spécifique. Il suffit ensuite d'ouvrir la session Hibernate avec SessionFactory.openSession(connection).

    Sinon, il se peut que p6spy trace suffisament d'info pour récupérer la next exception de postgres.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/11/2005, 12h59
  2. [Hibernate] Problème de sauvegarde
    Par lilou77 dans le forum Hibernate
    Réponses: 15
    Dernier message: 26/10/2005, 11h17
  3. [Language][Package]Probleme de portée d'un Objet
    Par julien.v dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2005, 14h23
  4. Réponses: 11
    Dernier message: 02/05/2005, 19h30
  5. [FLASH MX] Probleme avec le drag d'objet
    Par Toutouffe dans le forum Flash
    Réponses: 3
    Dernier message: 23/01/2005, 22h41

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