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 :

[Hibernate 3 & postgres] problème guillemet et quote dans SQL


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut [Hibernate 3 & postgres] problème guillemet et quote dans SQL
    Bonjours,

    Je découvre hibernate.
    Je développe avec Eclipse et le plugin "hibernatesynctronizer".

    J'utilise hibernate 3 et j'ai l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
    J'utilise postgreSQL 8 avec le driver postgresql-8.1-409.jdbc3.jar
    en faite hibernate ne met pas les guillemet " autout des nom des tables et ne met pas les quotes ' autour des string.

    Peut être une option a activé, un autre dialect à prendre.

    Je voudrai bien un coup de main.

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    Il n'y a vraiment personne qui puisse m'aider?
    Please!

  3. #3
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Ben si tu pouvais être un peu plus précis sur l'erreur .... Donner un fichier de mapping et une classe et un bout de code en exemple ...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    Voilà un extrait de la sortie (hibernate.show_sql activé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    11:08:34,884  WARN JDBCExceptionReporter:77 - SQL Error: 0, SQLState: null
    11:08:34,884 ERROR JDBCExceptionReporter:78 - L'élément du batch 0 insert into INF_HostingSite (inf_name, inf_address, inf_description, inf_objectMiscellaneousInfo, vs_objectUID) values (testSylvain, 10.0.0.1, testSylvain, youpi, 3146) a été annulé. Appeler getNextException pour en connaître la cause.
    11:08:34,884  WARN JDBCExceptionReporter:77 - SQL Error: 0, SQLState: 42P01
    11:08:34,884 ERROR JDBCExceptionReporter:78 - ERROR: relation "inf_hostingsite" does not exist
    11:08:34,900 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
    org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
     
    .....
     
     
    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into INF_HostingSite (inf_name, inf_address, inf_description, inf_objectMiscellaneousInfo, vs_objectUID) values (testSylvain, 10.0.0.1, testSylvain, youpi, 3146) a été annulé. Appeler getNextException pour en connaître la cause.
    	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2512)
    Le nom de mes table et champ comporte des majuscules.
    CE qui semble c'est l'absence totale de gillemet et quote autour des nom et des valeurs...


    le 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?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="test.hibernate">
    	<class
    		name="InfCluster"
    		table="INF_Cluster"
    	>
    		<meta attribute="sync-DAO">true</meta>
     
    		<meta attribute="sync-DAO">false</meta>
     
     
    		<id
    			name="VsObjectuid"
    			type="integer"
    			column="vs_objectUID"
    		>
    			<generator class="sequence"/>
    		</id>
    		<property
    			name="InfName"
    			column="inf_name"
    			type="string"
    			not-null="true"
    		/>
    		<property
    			name="InfSerial"
    			column="inf_serial"
    			type="string"
    			not-null="true"
    		/>
    		<many-to-one
    			name="InfPlatformuid"
    			column="inf_platformUID"
    			class="InfPlatform"
    			not-null="true"
    		>
    		</many-to-one>
    		<!--
    		<many-to-one
    			name="InfEquipmentclassuid"
    			column="inf_equipmentClassUID"
    			class="InfEquipmentclass"
    			not-null="true"
    		>
    		</many-to-one>
    -->
     
    	</class>	
    </hibernate-mapping>
    J'utilise les classes généré automatiquement par Hibernate Synchroniser.
    Et voici la classe de test:
    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
     
    public class Test1 {
     
        public static void main(String[] args) throws Exception{
            Test1 mgr = new Test1();        
                mgr.createAndStoreSite();
        }
     
        private void createAndStoreSite() {
     
            Session session = HibernateUtil.currentSession();
     
            Transaction tx = session.beginTransaction();
            InfHostingsite site1 = new InfHostingsite();
            site1.setInfAddress("10.0.0.1");
            site1.setInfDescription("testChtiboss");
            site1.setInfName("testChtiboss");
            site1.setInfObjectmiscellaneousinfo("youpi");
            session.save(site1);
            tx.commit();
            HibernateUtil.closeSession();
        }
    }

  5. #5
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Hello,
    Pour moi l'erreur suivante est pleine de sens:
    11:08:34,900 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
    Essaye donc de désactivier le BATCH SQL, j'ai déjà eu des problèmes avec lui, tu doit juste lettre dans ton fichier de config hibernate la propriété suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.jdbc.batch_size">0</property>

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    Ah! en faite l'erreur ne viens pas de là!
    J'ai trouvé c'était bien à cause des quotes.
    Il faut mettre les nom des colonnes et attribut entre backquote: comme ceci par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class
    		name="InfHostingsite"
    		table="`INF_HostingSite`"
    	>
    		<meta attribute="sync-DAO">true</meta>
     
    		<id
    			name="VsObjectuid"
    			type="integer"
    			column="`vs_objectUID`"
    		>
    .....
    Je ne trouve pas cela très pratique, d'autant plus que Hibernate Synchoniser ne gènère pas les back-quote. Et je n'ai pas vu d'option permettant de le faire.
    A moins qu'il soit possible de le faire avce les snippets? Mais je n'est pas vu où on pouvait les faire.
    Je pose maintenant une autre question. Comment on fait pour que Hibernate Synchroniser(le plugin d'eclipse) génère les fichier de mapping avec des back-quote?

    Merci

  7. #7
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Aucune idée ... Mais c'est étrange, je n'ai jamais eu besoin de ces back-quote ... En même temps, je ne vois pas ce qui pourrait ne pas être correct ...
    Tu pourrais mettre le fichier de config d'hibernate ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    J'ai vu cette option de quote ici
    http://www.hibernate.org/hib_docs/v3...tedidentifiers

    Et bien sous postgres les table et colonne avec des majuscule doivent être entouré de guillemet, sinon il ya une erreur.

    JE ne vois pas à quoi va te servir mon fichier de conf

    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
     
    <?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://10.165.128.252:5432/OMG</property>
    		<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    		<property name="hibernate.connection.username">postgres</property>
    		<property name="hibernate.connection.password"></property>
    		<!-- property name="hibernate.connection.pool_size"></property -->
     
    		<!-- dialect for PostgreSQL -->
            <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
            <!-- <property name="hibernate.jdbc.batch_size">0</property>-->
     
            <property name="hibernate.show_sql">false</property>
            <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
            <mapping resource="InfHostingSite.hbm"/>
            <mapping resource="InfCluster.hbm"/>
            <mapping resource="InfPlatform.hbm"/>
            <mapping resource="InfEquipment.hbm"/>
            <mapping resource="VsWeakproperties.hbm"/>
        </session-factory>
    </hibernate-configuration>

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 28
    Points : 15
    Points
    15
    Par défaut Même Pb - où sont les cadors ?
    Hibernate 2 avec une base postgreSQL 8.3 : Les noms des colonnes et des tables doivent être en minuscule

    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
     
    <?xml version="1.0" encoding="utf-8"?>
     
    <!DOCTYPE hibernate-configuration 
    	PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
     
    <hibernate-configuration>
    	<session-factory name="sessionFactory">
    		<!-- PostgreSQL Configuration -->
    		<property name="hibernate.connection.driver_class"> org.postgresql.Driver </property>
    		<property name="dialect"> net.sf.hibernate.dialect.PostgreSQLDialect </property>
    		<property name="hibernate.transaction.factory_class"> net.sf.hibernate.transaction.JDBCTransactionFactory </property>
    	    <property name="current_session_context_class">thread</property>    
    	    <property name="hibernate.show_sql">true</property>
    	    <!-- Driver / Dialect / transaction -->
    		<property name="hibernate.connection.url"> jdbc:postgresql://dev03:5432/EasyBox </property>
    		<property name="hibernate.connection.username">adminEasyBox</property>
    		<property name="hibernate.connection.password">adminEasyBox</property>
    		<!-- mapping -->
    		<mapping resource="hbm/Utilisateur.hbm" />
    	</session-factory>
    </hibernate-configuration>
    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
    11:12:40,051 DEBUG SessionFactoryImpl:196 - instantiated session factory
    11:12:40,067 DEBUG SessionImpl:560 - opened session
    11:12:40,067 DEBUG JDBCTransaction:37 - begin
    11:12:40,067 DEBUG DriverManagerConnectionProvider:84 - total checked-out connections: 0
    11:12:40,067 DEBUG DriverManagerConnectionProvider:90 - using pooled JDBC connection, pool size: 0
    11:12:40,067 DEBUG JDBCTransaction:41 - current autocommit status:false
    11:12:40,067 DEBUG IncrementGenerator:62 - fetching initial value: select max(IdUtilisateur) from Utilisateur
    11:12:40,083 DEBUG JDBCExceptionReporter:49 - Could not save object
    org.postgresql.util.PSQLException: ERROR: relation "utilisateur" does not exist
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
    	at net.sf.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:67)
    	at net.sf.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:42)
    	at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:776)
    	at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:749)
    	at fr.aqtech.easybox.HibernateTest.main(HibernateTest.java:27)
    net.sf.hibernate.exception.SQLGrammarException: Could not save object
    	at net.sf.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:58)
    	at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
    	at net.sf.hibernate.impl.SessionImpl.convert(SessionImpl.java:4131)
    	at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:794)
    	at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:749)
    	at fr.aqtech.easybox.HibernateTest.main(HibernateTest.java:27)
    Caused by: org.postgresql.util.PSQLException: ERROR: relation "utilisateur" does not exist
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
    	at net.sf.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:67)
    	at net.sf.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:42)
    	at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:776)
    	... 2 more
    11:12:40,083  WARN JDBCExceptionReporter:57 - SQL Error: 0, SQLState: 42P01
    11:12:40,083 ERROR JDBCExceptionReporter:58 - ERROR: relation "utilisateur" does not exist
    11:12:40,083 DEBUG JDBCTransaction:59 - commit
    11:12:40,083 DEBUG SessionImpl:2267 - flushing session
    11:12:40,083 DEBUG SessionImpl:2467 - Flushing entities and processing referenced collections
    11:12:40,083 DEBUG SessionImpl:2808 - Processing unreferenced collections
    11:12:40,083 DEBUG SessionImpl:2822 - Scheduling collection removes/(re)creates/updates
    11:12:40,083 DEBUG SessionImpl:2291 - Flushed: 0 insertions, 0 updates, 0 deletions to 0 objects
    11:12:40,083 DEBUG SessionImpl:2296 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
    11:12:40,083 DEBUG SessionImpl:2380 - executing flush
    11:12:40,083 DEBUG SessionImpl:2852 - post flush
    11:12:40,114 DEBUG SessionImpl:596 - transaction completion
    11:12:40,114 DEBUG SessionImpl:578 - closing session
    11:12:40,114 DEBUG SessionImpl:3383 - disconnecting session
    11:12:40,114 DEBUG DriverManagerConnectionProvider:120 - returning connection to pool, pool size: 1
    11:12:40,114 DEBUG SessionImpl:596 - transaction completion
    En bref, la requête SQL est mal formaté. PostgreSQL utilise les côtes pour limiter les noms des tables ou des colonnes.
    Il semble que le Dialect (ou le driver) ne fait pas son travail correctement.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    il faut ajouter des backotes ` autour de tes noms de tables

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème de simple quote dans le champ de recherche
    Par mesken dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/03/2012, 10h05
  2. [MySQL] Problème des doubles quotes dans la base de données
    Par betadev dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/02/2012, 14h46
  3. Réponses: 3
    Dernier message: 21/12/2011, 16h39
  4. Problème avec une requête dans SQL-Server
    Par krolis dans le forum Développement
    Réponses: 6
    Dernier message: 09/01/2011, 21h53
  5. [SQL-Server] Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 09h40

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