Question

J'ai un printemps / Hibernate webapp qui a des tests d'intégration qui fonctionnent sur une base de données HSQL en mémoire. Hibernate prend cette base de données vide et crée toutes mes tables essai et contraintes grâce à hbm2ddl = créer. Cependant, j'ai un nouveau haricot qui vérifie la présence d'une valeur de configuration particulière de la base de données au cours de son procédé afterPropertiesSet (), et ainsi lorsque ce haricot est initialisé, une telle ligne doit exister dans la base de données.

est-il un bon moyen de mettre en place un équivalent Java / Spring / Hibernate des appareils de test de rail? J'essaie de trouver un moyen de dire Hibernate « à chaque fois que vous créez ce tableau, insérer ces lignes immédiatement après ». Je ne pouvais pas trouver un rappel ou un crochet, je pourrais ajouter, mais peut-être il y a une autre façon.

Était-ce utile?

La solution

  

Je suis en train de trouver un moyen de mise en veille prolongée dire « chaque fois que vous créez ce tableau, insérer ces lignes immédiatement après »

Puisqu'Hibernate 3.1, vous pouvez inclure un fichier appelé import.sql dans le classpath d'exécution de mise en veille prolongée et au moment de l'exportation de schéma, Hibernate exécutera les instructions SQL contenues dans ce fichier après le schéma a été exporté.

Cette fonction a été annoncé dans le blog Rotterdam JBug et Hibernate de import.sql message:

  

import.sql: importer facilement des données dans vos tests unitaires

     

Mise en veille prolongée a une petite fonctionnalité soignée   qui est fortement sous-documentées et   inconnu. Vous pouvez exécuter un script SQL   lors de la création de SessionFactory   juste après le schéma de base de données   génération d'importer des données dans une nouvelle   base de données. Vous avez juste besoin d'ajouter un fichier   nommé import.sql dans votre classpath   racine et fixé soit create ou   create-drop comme   propriété hibernate.hbm2ddl.auto.

     

Je l'utilise pour Hibernate Rechercher dans   Action maintenant que j'ai commencé la   chapitre de la requête. Initialisées mon   base de données avec un nouvel ensemble de données pour   mes tests unitaires. JBoss Seam utilise également   beaucoup dans les divers exemples.   import.sql est une caractéristique très simple   mais il est très utile à la fois. Rappelles toi   que le SQL peut dépendre   votre base de données (ah portabilité!).

#import.sql file
delete from PRODUCTS
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...');
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
     

Pour plus d'informations sur cette   fonctionnalité, consultez blog de Eyal, il   a écrit une jolie petite entrée à ce sujet.   Rappelez-vous si vous voulez ajouter d'autres   Les objets de base de données (tables, des index et   ainsi de suite), vous pouvez également utiliser l'auxiliaire   disposent d'objets de base de données.

Il est toujours pas vraiment documenté.

Autres conseils

dans Hibernate 3.6 la configuration qui permet d'exécuter des commandes SQL arbitraires est:

hibernate.hbm2ddl.import_files

Voir http://docs.jboss.org /hibernate/core/3.6/reference/en-US/html_single/, remarquant qu'il ya une erreur dans la documentation:. la propriété est import_files, avec un s à la fin

Si vous parlez des tests JUnit et en utilisant AbstractTransactionalDataSourceSpringContextTests il y a des méthodes que vous pouvez remplacer comme onSetupBeforeTransaction qui fournissent un crochet pour pré-remplir les données de table de test etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top