In einem Java-Projekt arbeite ich an habe ich die folgende Setup für unsere Unit-Tests bekam:Wie kann ich die Verarbeitung von hibernate.hbm2ddl.import_files Wert kombiniert mit hsqldb debuggen?
- I Frühlings-Test MVC bin mit,
@RunWith(SpringJUnit4ClassRunner.class)
und@WebAppConfiguration
die Unit-Tests laufen, und ich erstellenMockMvc
Instanz mitwebAppContextSetup(webApplicationContext)
, um die Anwendung zu testen. - Ich habe eine Hibernate-Konfiguration, um eine speicherinterne HSQLDB einzurichten, alle Tabellen werden basierend auf den @Entity-Klassen erstellt.
- In der Hibernate-Konfiguration, setze ich die
hibernate.hbm2ddl.import_files
Eigenschaft, um eine Dateiimport.sql
mit SQL-Anweisungen zu laden, um die (In-Memory) -Datenbank zu füllen. Jetzt
, ich habe alle diese oben genannten Arbeiten bestätigt:
- Tests erfolgreich einsetzen/abrufen aus der In-Memory-DB.
- Die SQL-Anweisungen in der
import.sql
werden ausgeführt, wie verschiedene Tests bestätigen.
Nun ist das Problem: Fehler mit Aussagen vorkommenden ich in import.sql
hinzufügen scheint nicht überall gemeldet werden, noch ist jeder gegebene Hinweis darauf, dass ein Fehler überhaupt stattgefunden. Stattdessen werden nachfolgende Anweisungen einfach nicht ausgeführt. (Ich habe dies durch Tests bestätigt.)
Gibt es eine Möglichkeit oder Ort diese Fehler sind berichtet, dass ich anscheinend nicht bewusst bin? Gibt es dafür eine zusätzliche Hibernate-Eigenschaft?
Auszug aus Hibernate Test config:
<bean id="sessionFactory" name="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.archive.autodetection">class,hbm</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</prop>
<prop key="hibernate.connection.username">sa</prop>
<prop key="hibernate.connection.password"></prop>
<prop key="hibernate.connection.url">jdbc:hsqldb:mem:myschema</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.hbm2ddl.import_files">configuration/test/import.sql</prop>
<prop key="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</prop>
<!-- when using type="yes_no" for booleans, the line below allow booleans in HQL expressions: -->
<prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
</props>
</property>
</bean>
Vielen Dank für diese Alternative. Wenn ich es implementiere, tritt ein Fehler bezüglich der Nicht-Existenz einer benutzten Tabelle auf. Könnte es sein, dass diese Methode die import.sql ausführt, bevor Hibernate die Tabellen automatisch erstellt? –
Ja, Hinzufügen hängt von Hibernate SessionFactory ab. In meinem Beispiel erstellt und löscht Spring Tabellen direkt in SQL. – hoaz
Leider bin ich dabei, dass ich Hibernate's Auto-Creating hier verwenden muss ... Danke trotzdem, weitere Vorschläge sind willkommen! –