Lorsque mon code émet un appel comme celui-ci:
entityManager.find(Customer.class, customerID);
Comment puis-je voir la requête SQL pour cet appel? En supposant que je n'ai pas accès au serveur de base de données pour profiler / surveiller les appels, existe-t-il un moyen de consigner ou d'afficher dans mon IDE les requêtes SQL correspondantes émises par les appels JPA? Je vais contre SQL Server 2008 R2 en utilisant le pilote jTDS.
Réponses:
Les options de journalisation sont spécifiques au fournisseur. Vous devez savoir quelle implémentation JPA vous utilisez.
Hibernate ( voir ici ):
EclipseLink ( voir ici ):
OpenJPA ( voir ici ):
DataNucleus ( voir ici ):
Définissez la catégorie de journal
DataNucleus.Datastore.Native
sur un niveau, commeDEBUG
.la source
De plus, si vous utilisez EclipseLink et que vous souhaitez afficher les valeurs des paramètres SQL, vous pouvez ajouter cette propriété à votre fichier persistence.xml:
la source
Si vous utilisez la mise en veille prolongée et la connexion comme enregistreur, vous pouvez utiliser ce qui suit (affiche uniquement les liaisons et non les résultats):
org.hibernate.SQL = DEBUG imprime la requête
org.hibernate.type = TRACE imprime les liaisons et normalement les résultats, qui seront supprimés via le filtre personnalisé
Vous avez besoin de la dépendance janino (http://logback.qos.ch/manual/filters.html#JaninoEventEvaluator):
la source
Dans EclipseLink pour obtenir le SQL pour une requête spécifique au moment de l'exécution, vous pouvez utiliser l'API DatabaseQuery:
Ce SQL contiendra? pour les paramètres. Pour faire traduire le SQL avec les arguments, vous avez besoin d'un DatabaseRecord avec les valeurs des paramètres.
Source: Comment obtenir le SQL pour une requête
la source
Afin de voir tous les SQL et paramètres dans OpenJPA, mettez ces deux paramètres dans le persistence.xml:
la source
Si vous voulez voir les requêtes exactes avec les valeurs de paramètre et les valeurs de retour, vous pouvez utiliser un pilote de proxy jdbc. Il interceptera tous les appels jdbc et enregistrera leurs valeurs. Quelques procurations:
Ils peuvent également fournir des fonctionnalités supplémentaires, telles que la mesure du temps d'exécution des requêtes et la collecte de statistiques.
la source
Exemple utilisant log4j ( src \ log4j.xml ):
la source
J'ai fait une feuille de triche qui, je pense, peut être utile aux autres. Dans tous les exemples, vous pouvez supprimer la
format_sql
propriété si vous souhaitez conserver les requêtes enregistrées sur une seule ligne (pas de jolie impression).Jolies requêtes SQL d'impression à standard sans paramètres d'instructions préparées et sans optimisations d'un framework de journalisation :
application.properties
fichier:application.yml
fichier:Jolies requêtes SQL d'impression avec des paramètres d'instructions préparées à l'aide d'un cadre de journalisation :
application.properties
fichier:application.yml
fichier:Jolies requêtes SQL d'impression sans paramètres d'instructions préparées à l'aide d'un cadre de journalisation :
application.properties
fichier:application.yml
fichier:Source (et plus de détails): https://www.baeldung.com/sql-logging-spring-boot
la source
De plus, si vous utilisez WildFly / JBoss, définissez le niveau de journalisation de org.hibernate sur DEBUG
la source
Une autre bonne option si vous avez trop de journal et que vous ne voulez mettre que temporel
System.out.println()
, vous pouvez, en fonction de votre fournisseur faire:la source
Si vous utilisez Spring Framework. Modifiez votre fichier application.properties comme ci-dessous
la source
Voir Impossible de faire en sorte que la mise en veille prolongée cesse d'afficher SQL à l'aide de l'adaptateur de fournisseur Spring JPA
la source
Avec Spring Boot, ajoutez simplement: spring.jpa.show-sql = true à application.properties. Cela affichera la requête mais sans les paramètres réels (vous verrez? Au lieu de chaque paramètre).
la source
Pendant le développement exploratoire et pour concentrer la journalisation du débogage SQL sur la méthode spécifique que je veux vérifier, je décore cette méthode avec les instructions de journalisation suivantes:
la source
EclipseLink pour sortir le SQL (configuration persistence.xml):
la source
Il y a un fichier appelé persistence.xml Appuyez sur Ctrl + Maj + R et trouvez-le, puis, il y a un endroit écrit quelque chose comme showSQL.
Dis-le juste comme vrai
Je ne sais pas si le serveur doit être démarré en mode débogage. Vérifiez les SQL créés sur la console.
la source