Bonjour,
Mon problème est relativement simple : j'aimerai afficher le code sql qui est généré par hibernate, dans ma console, de manière claire et concise. Comment faire?
J'ai bien essayé le logger hibernate que l'on configure par
<property name="hibernate.show_sql">true</property>
et qui génère des lignes du style :
Hibernate: insert into User (password, email, creationDate, lastLoginDate, firstName, lastName, gender, birthdate, sign, avatar, login) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Je trouve ce log presque totalement inutile étant donné qu'il n'affiche que des points d'interrogations pour les valeurs passées.
Après recherche, j'ai trouvé que l'on pouvait positionner dans le fichier log4j :
log4j.logger.org.hibernate.type=DEBUG
qui me donne alors
1 2 3 4 5 6 7 8 9 10 11 12
| Hibernate: insert into User (password, email, creationDate, lastLoginDate, firstName, lastName, gender, birthdate, sign, avatar, login) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2490 [main] DEBUG org.hibernate.type.StringType - binding null to parameter: 1
2490 [main] DEBUG org.hibernate.type.StringType - binding null to parameter: 2
2490 [main] DEBUG org.hibernate.type.TimestampType - binding '2008-01-22 15:39:14' to parameter: 3
2490 [main] DEBUG org.hibernate.type.TimestampType - binding null to parameter: 4
2491 [main] DEBUG org.hibernate.type.StringType - binding 'JUnitUser' to parameter: 5
2491 [main] DEBUG org.hibernate.type.StringType - binding 'JUnitUser' to parameter: 6
2491 [main] DEBUG org.hibernate.type.StringType - binding null to parameter: 7
2491 [main] DEBUG org.hibernate.type.TimestampType - binding null to parameter: 8
2491 [main] DEBUG org.hibernate.type.StringType - binding null to parameter: 9
2491 [main] DEBUG org.hibernate.type.StringType - binding null to parameter: 10
2491 [main] DEBUG org.hibernate.type.StringType - binding 'JUnitUser' to parameter: 11 |
Je trouve cela à peine mieux, presque illisible parce perdu dans la quantité astronomique de logs que ça produit, et compliqué à déchiffrer puisque les bindings ne sont même pas nommés, mais donnent juste la valeur en fonction de la position.
Ma question est donc :
Est-il possible d'obtenir dans les logs une ligne de SQL simple et consise avec tout ce qui faut dedans, comme on l'écrirait nous même dans un client SQL (en passant par un logger JDBC peut-être?)
Du genre :
insert into User (creationDate, firstName, lastName, login) values ('2008-01-22 15:39:14', 'JUnitUser', 'JUnitUser', 'JUnitUser')
Merci pour vos réponses!
Partager