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

JPA Java Discussion :

@NamedQuery obtenir le sql exécuté


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    ----
    Inscrit en
    Février 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Février 2005
    Messages : 27
    Par défaut @NamedQuery obtenir le sql exécuté
    Bonjour,

    j'utilise des "entity beans from tables 3.0" dans mon programme ainsi que des annotations "@NamedQuery" pour mes différentes requêtes. Lors d'une exécution de requête telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    @NamedQuery(name = "FacFacture.findByID", query = "select o from FacFacture o where o.facId = :num")
    ...
    ...
    int id = 10;
    Query q = em.createNamedQuery("FacFacture.findByID").setParameter("num", id);
    FacFacture fac =  (FacFacture)q.getSingleResult();
    ...
    j'aimerais pouvoir obtenir la requête qui a été exécutée. C'est-à-dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select o from FacFacture o where o.facId = 10
    J'ai essayé de trouver une méthode de type "getSQLString" avec mon objet Query, mais je n'ai rien trouvé. Quelqu'un peut-il me donner une piste pour obtenir la requête sql réellement exécutée à partir du code en dessus?

    merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Cela dépend totalement du provider jpa que tu utilises.
    Par exemple avec hibernate, il y une propriété de configuration qui est de mémoire hibernate.show_sql. Par contre elle ne "bind" pas les variables donc dans ton exemple cela tracera :
    select o from FacFacture o where o.facId = ?
    Mais t'auras pas la valeur 10 affichée.
    Avec Toplink je crois que c'est possible par contre.

    Tu peux aller plus loin en utilisant un driver JDBC qui intercepte et logs les appels vers ton VRAI driver JDBC.
    Par exemple p6spy

  3. #3
    Membre actif
    Profil pro
    ----
    Inscrit en
    Février 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Février 2005
    Messages : 27
    Par défaut
    hello,

    merci pour ta réponse. en fait je travaille avec toplink et je débute. par rapport à ta suggestion de "show_sql", si je rajoute ce paramètre dans le fichier persistence.xml, comment obtenir ce fameux SQL. c'est-à-dire, va-t-il être écrit dans un fichier ou récupérable au travers d'un objet ou d'une classe....

    merci d'avance et bon week-end

    Delphives

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Cette information sera logguée selon le paramétrage de log de ton Api. Ca peut donc être un fichier, ou sur la sortie standard.
    Le parametre hibernate.show_sql fonctionne qu'avec hibernate. Pour Toplink cherche dans leur doc.
    Pour Toplink apparement :
    toplink.logging.level=FINE
    http://www.oracle.com/technology/pro...TopLinkLogging

  5. #5
    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 Delphives Voir le message
    Bonjour,

    j'utilise des "entity beans from tables 3.0" dans mon programme ainsi que des annotations "@NamedQuery" pour mes différentes requêtes. Lors d'une exécution de requête telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    @NamedQuery(name = "FacFacture.findByID", query = "select o from FacFacture o where o.facId = :num")
    ...
    ...
    int id = 10;
    Query q = em.createNamedQuery("FacFacture.findByID").setParameter("num", id);
    FacFacture fac =  (FacFacture)q.getSingleResult();
    ...
    j'aimerais pouvoir obtenir la requête qui a été exécutée. C'est-à-dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select o from FacFacture o where o.facId = 10
    J'ai essayé de trouver une méthode de type "getSQLString" avec mon objet Query, mais je n'ai rien trouvé. Quelqu'un peut-il me donner une piste pour obtenir la requête sql réellement exécutée à partir du code en dessus?

    merci d'avance
    apparement il n'y a pas d'API pour avoir le code du query que ce soit le texte original ou sa conversion en SQL…

    par contre au niveau de l'annotation elle-même vous avez l'API "query()"…

    si vous vous organisez un peu en nommant les query CLASS.name et en les placant sur la CLASS correspondante vous pouvez récupérer l'annotation via java.lang.reflection et en déduisant le nom de la classe du nom du query…
    pas l'idéal mais mieux que rien…

Discussions similaires

  1. VBA obtenir texte SQL requète avec ADO
    Par cbleas dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/08/2006, 15h08
  2. Variables dans un .sql exécuté par sqlplus
    Par ekke dans le forum Oracle
    Réponses: 10
    Dernier message: 12/04/2006, 17h03
  3. obtenir script sql pour le donner à l'hebegeur ( bd mysql)
    Par hafedh1211 dans le forum Installation
    Réponses: 1
    Dernier message: 04/03/2006, 15h36
  4. [T-SQL] exécuter un ALTER TABLE/COLUM multiple
    Par elderion dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/10/2005, 16h06
  5. Liste de requete SQL à exécuter
    Par dgouyette dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/09/2005, 15h29

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