Frage

Ich habe einen Frühlings-/Hibernate-WebApp mit einigen Integrationstests, die in einer HSQL-Datenbank in Memory ausgeführt werden. Hibernate nimmt diese leere Datenbank ein und erstellt alle meine Testtabellen und Einschränkungen dank Hbm2ddl = create. Ich habe jedoch eine neue Bean, die während ihrer NacherpropertieSt () -Methode einen bestimmten Konfigurationswert aus der Datenbank überprüft. Wenn diese Bean initialisiert wird, muss eine solche Zeile in der Datenbank vorhanden sein.

Gibt es eine gute Möglichkeit, ein Java/Spring/Hibernate -Äquivalent zu den Testvorrichtungen von Rail zu errichten? Ich versuche einen Weg zu finden, um den Hibernate zu sagen, "wenn Sie diese Tabelle erstellen, fügen Sie diese Zeilen unmittelbar danach ein". Ich konnte keinen Rückruf oder einen Haken finden, den ich hinzufügen konnte, aber vielleicht gibt es einen anderen Weg.

War es hilfreich?

Lösung

Ich versuche einen Weg zu finden, um den Hibernate zu sagen: "Wenn Sie diese Tabelle erstellen, fügen Sie diese Zeilen unmittelbar danach ein."

Da Hibernate 3.1 eine Datei mit dem Namen namens einfügen kann import.sql Im Laufe der Laufzeitklassen von Hibernate und zum Zeitpunkt des Schemasxports wird Hibernate die in dieser Datei enthaltenen SQL -Anweisungen nach dem Exportieren des Schemas ausführen.

Diese Funktion wurde in der angekündigt Rotterdam Jbug und Hibernate Import.sql Blogeintrag:

Import.sql: Importieren Sie Daten einfach in Ihren Unit -Tests

Hibernate hat eine nette kleine Funktion, die stark unterdokumentiert und unbekannt ist. Sie können ein SQL -Skript während der ausführen SessionFactory Erstellung direkt nach dem Datenbankschema -Erzeugung zum Importieren von Daten in einer neuen Datenbank. Sie müssen nur eine Datei mit dem Namen namens hinzufügen import.sql in Ihrem Klassenpfadwurzel und feststellen entweder create oder create-drop wie dein hibernate.hbm2ddl.auto Eigentum.

Ich benutze es für Hibernate -Suche in Aktion, jetzt, wo ich das Abfragekapitel gestartet habe. Es initialisiert meine Datenbank mit einem neuen Datensatz für meine Unit -Tests. Jboss Seam verwendet es auch in den verschiedenen Beispielen viel. import.sql ist eine sehr einfache Funktion, ist aber zum Zeitpunkt sehr nützlich. Denken Sie daran, dass der SQL möglicherweise von Ihrer Datenbank abhängig ist (AH -Portabilität!).

#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');

Weitere Informationen zu dieser Funktion finden Sie unter Eyals Blog, Er schrieb einen schönen kleinen Eintrag darüber. Denken Sie daran, wenn Sie zusätzliche Datenbankobjekte (Indizes, Tabellen usw.) hinzufügen möchten, können Sie auch die Funktion für Auxiliary -Datenbankobjekte verwenden.

Es ist immer noch nicht wirklich dokumentiert.

Andere Tipps

In Hibernate 3.6 Die Konfiguration, mit der beliebige SQL -Befehle ausgeführt werden können, lautet:

hibernate.hbm2ddl.import_files

Sehen in http://docs.jboss.org/hibernate/core/3.6/reference/en-us/html_single/, bemerken, dass ein Fehler in der Dokumentation vorliegt: Die Eigenschaft ist import_files mit einem S am Ende.

Wenn Sie über Junit -Tests sprechen und verwenden AbstractTransactionAldataSourcespringContextTests Es gibt Methoden, die Sie überschreiben können, wie startupbeForetransaction die einen Haken für die vorbestimmten Testtabellendaten usw. liefern, usw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top