2015-04-20 12 views
5

W projekcie Java pracuję nad Mam następujące ustawienia dla testów jednostkowych:Jak mogę debugować przetwarzanie wartości hibernate.hbm2ddl.import_files w połączeniu z hsqldb?

  • Używam Wiosna testową MVC @RunWith(SpringJUnit4ClassRunner.class) i @WebAppConfiguration do uruchamiania testów jednostkowych i tworzę MockMvc wystąpienie przy użyciu webAppContextSetup(webApplicationContext) do przetestowania aplikacji.
  • Mam konfigurację Hibernate do ustawienia HSQLDB w pamięci, wszystkie tabele są tworzone na podstawie klas @Entity.
  • W konfiguracji hibernacji ustawiam właściwość hibernate.hbm2ddl.import_files, aby załadować plik import.sql z instrukcjami SQL, aby zapełnić bazę danych (w pamięci).

Teraz mam potwierdziła wszystkie te powyższe prace:

  • Testy mogą z powodzeniem wstawić/pobrać z DB w pamięci.
  • Instrukcje SQL w import.sql są wykonywane, jak potwierdzają różne testy.

Teraz problemem: Błędy występujące ze sprawozdania dodam w import.sql nie wydają się być zgłaszane w dowolnym miejscu, nie jest jakąś wskazówką ponieważ wystąpił błąd w ogóle. Zamiast tego kolejne instrukcje nie są po prostu wykonywane. (Potwierdziłem to poprzez testowanie.)

Czy jest jakiś sposób lub miejsce tych błędów zgłoszone, że jestem najwyraźniej nieświadomy? Czy jest do tego dodatkowa właściwość Hibernuj?

Fragment z testu hibernacji 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> 

Odpowiedz

1

Niezupełnie odpowiedź na swoje pytanie, ale alternatywny sposób rozwiązywania testu populację DB.

Istnieje przestrzeń nazw XML na wiosnę o nazwie jdbc, która umożliwia wstępne wypełnienie bazy danych danymi początkowymi podczas uruchamiania kontekstowego Spring. Również doniesienia, że ​​błędy w swoich zapytania SQL w porządku:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/jdbc 
     http://www.springframework.org/schema/jdbc/spring-jdbc.xsd"> 

    <jdbc:initialize-database data-source="dataSource"> 
     <jdbc:script location="org/mytestproject/schema-drop-hsqldb.sql" /> 
     <jdbc:script location="org/mytestproject/schema-hsqldb.sql" /> 
     <jdbc:script location="org/mytestproject/data-hsqldb.sql" /> 
    </jdbc:initialize-database> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driver}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
     <property name="validationQuery" value="${jdbc.validationQuery}"/> 
    </bean> 
</beans> 
+0

Dzięki za oferowanie tej alternatywy. Kiedy go zaimplementuję, pojawia się błąd dotyczący nieistnienia używanej tabeli. Czy to możliwe, że ta metoda wykonuje import.sql przed hibernowaniem, automatycznie tworząc tabele? –

+0

Tak, dodać zależy od hibernacji sessionFactory. W mojej próbce Spring tworzy i upuszcza tabele bezpośrednio w SQL – hoaz

+0

Niestety utknąłem z koniecznością automatycznego tworzenia Hibernacji tutaj ... Mimo to jednak, wszelkie dalsze sugestie są mile widziane! –

0

można włączyć rejestrowanie na klasy org.hibernate.tool.hbm2ddl.SchemaExport z poziomu śladowych.

Niektóre błędy są rejestrowane na poziomie DEBUG (np nie znaleziono pliku):

10:29:21,039 DEBUG SchemaExport:353 - Import file not found: ../myFile.sql 
Powiązane problemy