2011-11-01 14 views
9

Próbuję użyć bazy danych w pamięci do wyodrębnienia bazy danych z danymi typu teradata. Muszę stworzyć schemat przed budowaniem tabel, jednak daje mi to pasowanie.Skrypt uruchamiania do utworzenia schematu w HSQLDB

Używam Spring i mam dużo interakcji z bazą danych z import.sql, jednak to się dzieje po tym, jak Hibernate utworzył wszystkie tabele. Próbowałem użyć pliku .script, który powinien odczytać HSQLDB, ale myślę, że jeśli używasz bazy danych w pamięci, która nie działa. Przesunąłem trochę pliki i nic nie wydaje się trafiać.

Ktoś wymyślił, jak utworzyć schemat przy starcie dla bazy danych HSQLDB w pamięci?

Odpowiedz

5

Jeśli uruchomić skrypt w ten sposób ...

<?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-3.0.xsd 
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"> 


<jdbc:embedded-database id="dataSource" type="H2" > 
    <jdbc:script location="classpath:my.sql" />  
</jdbc:embedded-database> 

... to jest wykonywane przed jego inicjalizacji Hibernate robi rzeczy.


Przetestowałem to jeszcze raz, specjalnie dla Ciebie. Jest uruchamiany, zanim Hibernate utworzy tabele. Zobacz ten dziennik (uruchomiony skrypt jest w ciągu pierwszych 3 linie, Hibernate w tych ostatnich):

2011-11-01 19:10:08,380 [main] INFO org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory - Creating embedded database 'dataSource' 
2011-11-01 19:10:08,583 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Executing SQL script from class path resource [my.sql] 
2011-11-01 19:10:08,683 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Done executing SQL script from class path resource [my.sql] in 100 ms. 
2011-11-01 19:10:08,683 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'dataSource' of type [class org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2011-11-01 19:10:08,683 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'dataSource' of type [class org.springframework.jdbc.datasource.SimpleDriverDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2011-11-01 19:10:08,700 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#35712651' of type [class org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2011-11-01 19:10:08,717 [main] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'testH2DbPersistenceUnit' 
2011-11-01 19:10:08,854 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final 
2011-11-01 19:10:08,859 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.7.Final 
2011-11-01 19:10:08,861 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found 
... 
2011-11-01 19:10:10,313 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - Running hbm2ddl schema update 
2011-11-01 19:10:10,313 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - fetching database metadata 
2011-11-01 19:10:10,315 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - updating schema 
+0

Występuje po zakończeniu wszystkich czynności. Zła odpowiedź. Przepraszam. Ale jest bardzo fajnie ... – markthegrea

+0

@markthegrea: Dziwne, kiedy go wypróbuję, robi się, zanim hibernacja stworzy tabele. Aby to udowodnić, dołączyłem dzienniki. Więc twój problem musi być czymś innym. -- Poprawna odpowiedź. – Ralph

+0

Ralph, rozgryzłem to. Wprowadzałem kod, który mi dałeś PO utworzeniu źródła danych. Trochę czasu zajęło mi pozyskanie Spring logging, ale lokalizacja zdecydowanie zrobiła różnicę. Jeśli umieścisz go PRZED źródłem xml, działa tak jak w reklamie. Nie zdawałem sobie sprawy, że rozkaz przyniósł zmianę na wiosnę. Ponadto, Spring wydaje się domyślnie "jdbc: hsqldb: mem: testdb", konkretnie "testdb". Nazwałam moje inaczej, a Spring uruchamiał "testdb" w pamięci. Kiedy zmieniłem moje na "testdb", bingo, wszystko działało dobrze. Dzięki! – markthegrea

0

Można użyć plik bazy danych z wszystkich danych w pamięci i bez zmiany napisany przez Twojego testu . Powinno to służyć twojemu celowi.

Najpierw utwórz schemat bazy danych pod adresem URL jdbc:hsqldb:file:initdata i wykonaj SHUTDOWN. Następnie dodać files_readonly=true do pliku initdata.properties lub alternatywnie użyć poniższy adres URL:

jdbc:hsqldb:file:initdata;files_readonly=true 

Gdy testy zakończą się przeciwko tej bazy, nic nie jest napisane do plików baz danych i wszystkie dane są w pamięci.

Powiązane problemy