Скрипт запуска для создания схемы в HSQLDB - PullRequest
9 голосов
/ 01 ноября 2011

Я пытаюсь использовать базу данных в памяти для макета базы данных teradata. Мне нужно создать схему до того, как будут построены таблицы, однако, это дает мне посадки.

Я использую Spring и много взаимодействую с базой данных import.sql, однако, это выполняется после того, как Hibernate создал все таблицы. Я пытался использовать файл .script, который должен прочитать HSQLDB, но я думаю, что когда вы используете базу данных в памяти, которая не работает. Я немного переместил файлы, и, похоже, ничего не произошло.

Кто-нибудь выяснил, как создать схему при запуске для базы данных HSQLDB в памяти?

Ответы [ 2 ]

5 голосов
/ 01 ноября 2011

Если вы запустите свой скрипт таким образом ...

<?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>   

... тогда он будет выполнен до того, как Hibernate выполнит свою инициализацию.


Я протестировал его снова, специально для тебя.Он запускается до того, как Hibernate создаст таблицы.Смотрите этот журнал ( выполнение скрипта в первых 3 строках, Hibernate в последних ):

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 голосов
/ 02 ноября 2011

Вы можете использовать файл: базу данных со всеми данными в памяти и без каких-либо изменений, записанных вашим тестом. Это должно служить вашей цели.

Сначала создайте схему базы данных с URL-адресом jdbc:hsqldb:file:initdata и выполните SHUTDOWN. Затем добавьте files_readonly=true к файлу initdata.properties или используйте URL-адрес ниже:

jdbc:hsqldb:file:initdata;files_readonly=true

Когда ваши тесты запускаются для этой базы данных, в файлы базы данных ничего не записывается и все данные находятся в памяти.

...