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 :

Comment recupérer le code SQL généré par Hibernate !


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut Comment recupérer le code SQL généré par Hibernate !
    Bonjour à Tous !

    je travaille sous Eclipse avec Hibernate3 et PostgreSQL8.2 !
    Dans mon projet eclipse j'emets des requêtes en HQL et j'ai besoin de recupérer le code SQL généré par Hibernate et non le voir afficher dans la console (en mettant la propriéte show_sql d'hibernate à true dans le fichier de configuration ).

    Alors comment récupérer le code SQL généré par Hibernate ? (dans une variable de type STRING par exemple)

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    une petite idée de l'amusement qui t'attends, voici un bout de SessionImpl, qui gère les query hql:

    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
    762   public List find(String query) throws HibernateException {
    763     return list( query, new QueryParameters() );
    764   }
    765 
     
    774   public List list(String query, QueryParameters queryParameters) throws HibernateException {
    775 
    776     if ( log.isTraceEnabled() ) {
    777       log.trace( "find: " + query );
    778       queryParameters.traceParameters(factory);
    779     }
    780 
    781     queryParameters.validateParameters();
    782     QueryTranslator[] q = getQueries(query, false);
    783 
    784     List results = CollectionHelper.EMPTY_LIST;
    785 
    786     dontFlushFromFind++;   //stops flush being called multiple times if this method is recursively called
    787 
    788     //execute the queries and return all result lists as a single list
    789     try {
    790       for ( int i = 0; i < q.length; i++ ) {
    791         List currentResults = q[i].list(this, queryParameters);
    792         currentResults.addAll(results);
    793         results = currentResults;
    794       }
    795     }
    796     finally {
    797       dontFlushFromFind--;
    798     }
    799     return results;
    800   }
     
    819   private QueryTranslator[] getQueries(String query, boolean scalar) throws HibernateException {
    820 
    821     // take the union of the query spaces (ie. the queried tables)
    822     QueryTranslator[] q = factory.getQuery( query, scalar, getEnabledFilters() );
    823     return prepareQueries(q);
    824 
    825   }
    Les QueryTranslator semblent contenir ce dont tu as besoin, reste à savoir comment les récupérer

  3. #3
    Membre expérimenté Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Tu peux éventuellement regarder du côté des ConnectionProvider. Cela te donne accès à la connexion JDBC (interface java.sql.Connection) et donc aux appels SQL.

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    je n'y arrive pas ! je debute en JAVA !!!

    Déjà je ne comprends pas grand chose au code de tchize !

    Si vous pouviez m'indiquer les étapes à suivre...

    Merci

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    En gros, c'est pas prévu par hibernate, donc les méthodes que tu pourrais avoir sont généralement assez avancées, donc pas pour débuter. Ce que tu veux faire, récupérer le sql de hibernate, c'est utiliser hibernate comme il a pas été prévu pour. Le code que j'ai indiqué est du code interne à hibernate, là ou il génère ses requetes sql avant de les exécuter. tu notera que ces méthodes sont "private", donc non accessible, donc difficile d'y avoir accès.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par nebisse Voir le message
    Bonjour à Tous !

    je travaille sous Eclipse avec Hibernate3 et PostgreSQL8.2 !
    Dans mon projet eclipse j'emets des requêtes en HQL et j'ai besoin de recupérer le code SQL généré par Hibernate et non le voir afficher dans la console (en mettant la propriéte show_sql d'hibernate à true dans le fichier de configuration ).

    Alors comment récupérer le code SQL généré par Hibernate ? (dans une variable de type STRING par exemple)

    Merci d'avance !

    lorsque show_sql est true Hibernate utilise org.apache.commons.logging avec
    LogFactory.getLog("org.hibernate.SQL");

    il doit être possible de configurer org.apache.commons.logging pour rediriger les logs vers votre propre logger (une classe de votre projet)…

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    JeitEmgie: bien vu! Et c'est presque vrai

    en fait, show_sql est une "alternative" à l'utilisation du logger org.hibernate.SQL, et show_sql utilise toujours la console:

    hibernate.show_sql Write all SQL statements to console. This is an alternative to setting the log category org.hibernate.SQL to debug.
    Donc effectivement, utiliser un logger perso peu aider, mais attention au multithreading

  8. #8
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    peut être tchize trouve t il que j'ai pas le niveau; et c'est vrai qu'en tant que débutant c'est difficile !
    Mais il me le faut ce SQL natif généré par Hibernate. Et je fais m'y mettre !

    Merci !

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je savais pas qu'il y avait un logger pour çà, çà va etre plus facile

    Commence par regarder un peu la doc de commons logging, çà décrit comment fonctionnent les loggers, comment les configurer, etc. Ensuite, tu devrais faire un logger perso, qui enregistre ce qu'on lui envoie, et relier ce logger avec la config sur org.hibernate.SQL, avec un log level à DEBUG.

  10. #10
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut ca y est je l'ai !!! mon code SQL
    J'ai résussi à récuperer ce fameux code SQL dans un fichier texte !!!!
    J'ai user du framework log4j en passant par son fichier de configuration log4j.properties dans lequel j'ai defini 2 Appenders (destinations logigues des messages) l'un sortie Console et l'autre mon fichier texte. Ensuite j'ai affecter ces appenders à deux loggers respectivement rootLogger et org.hibernate.org (celui qui m'interesse !!!!!!!) .

    Merci à JeitEmgie et tchize pour votre aide.

    @ +

  11. #11
    Membre très actif Avatar de ZeRevo
    Inscrit en
    Avril 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 302
    Par défaut
    Oui mais le problème c'est que ca ne te met pas les données (elles sont remplacées par des ?) ...

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 17/10/2013, 03h27
  2. [MySQL] Récupérer Code HTML généré par PHP
    Par @ngelofdeath dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/04/2006, 21h51
  3. Réponses: 12
    Dernier message: 20/04/2006, 15h15
  4. Réponses: 3
    Dernier message: 27/01/2006, 15h48
  5. Réponses: 7
    Dernier message: 12/09/2005, 11h05

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