2010-05-05 2 views
1

J'essaie de consigner l'activité d'hibernation (uniquement les opérations dml) dans un fichier de script SQL. Mon but est de trouver un moyen de reconstruire la base de données d'un point de départ donné à l'état actuel en exécutant le script généré.Décharger l'activité Hibernate dans le fichier de script SQL

Je peux obtenir les requêtes sql à partir des logs de log4j mais ils ont plus d'informations que les requêtes sql brutes et je devrais les analyser et extraire seulement les instructions utiles. Donc, je suis à la recherche d'une manière programmatique, peut-être en écoutant les opérations persist/merge/delete et en accédant aux instructions sql générées par hibernate. Je n'aime pas réinventer la roue, donc si quelqu'un connaît un moyen de le faire, j'apprécierais beaucoup.

Merci à l'avance

Répondre

1

En général, la meilleure façon de le faire est de tourner uniquement sur l'enregistrement sur votre serveur SQL. Tous les principaux RDBMS prennent en charge la journalisation de toutes les instructions SQL qu'ils exécutent. Cela a l'avantage supplémentaire d'attraper des choses qui se sont produites en dehors d'Hibernate.

+0

Salut, Travis, dans mon cas ce n'est pas une bonne option parce que je veux détecter si quelque chose a changé dans la base de données à la suite d'une opération effectuée en contournant l'application. Merci quand même. – zeven

+0

Les journaux sont tous faits avec l'association de l'utilisateur. Si Hibernate est connecté avec un utilisateur spécifique, il suffit de rejouer les instructions faites par cet utilisateur. Si vous pensez que cela ne fonctionnera pas en raison de la «sécurité», alors votre modèle de sécurité est brisé en premier lieu. –

0

Vous pouvez également essayer d'utiliser NHProf qui va intercepter/enregistrer le trafic hibernate dans la base de données et le vider dans un fichier XML. Vous devrez peut-être analyser le fichier à la main, mais toutes les informations seront là.

+0

Bonne option, je vais lire la documentation. Merci R0MANARMY. – zeven

0

Vous pouvez également connecter directement au niveau le niveau JDBC et enregistrer les instructions JDBC exécutées.

P6Spy est un excellent outil pour inspecter ce qui se passe. Il peut enregistrer les requêtes, bien que je ne sache pas si vous pouvez les rejouer tout comme.

Je suis sûr qu'il existe un autre outil de ce type (ou pire, vous pourriez essayer de mettre en œuvre la sous-classe DataSource, Connection et PreparedStatement de votre choix pour le faire vous-même).

+0

Si je peux accrocher jdbc déclarations ce serait ce que je cherche. Je vais enquêter un peu. Avez-vous déjà implémenté quelque chose comme ça? Merci ewernli. – zeven

+0

@zeven Non. J'ai utilisé P6Spy ou d'autres produits basés sur cette technique (par exemple, Glassfish peut envelopper l'objet JDBC de la source de données sous-jacente), mais jamais les wrappers pour les objets JDBC. – ewernli