2013-08-20 4 views
8

настоящее время я использую следующие настройки для создания схемы в качестве встроенной базы данных перед выполнением моих тестов противЛучший способ для создания схемы в встроенной базе данных HSQL

В моем контексте приложения

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

createSchema .SQL

create schema ST_TEST AUTHORIZATION DBA; 

свойства Hibernate

<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
    <property name="hibernate.default_schema" value="ST_TEST"/> 
    <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
    <property name="hibernate.show_sql" value="true" /> 
    <property name="hibernate.use_sql_comments" value="true" /> 
    <property name="hibernate.cache.use_second_level_cache" value="false" /> 
</properties> 

Мой вопрос в том, что это лучший способ сделать это. Или я могу использовать другое имя схемы в своих свойствах? или установить имя схемы в элементе jdbc: embedded-database

ответ

11

По умолчанию HSQL создает схему под названием PUBLIC. source: HSQL documentation

Видя, как имя схемы никогда не видели в тестах (именованные запросы/сущности менеджера, чтобы сделать взаимодействие), вы можете изменить свойства Hibernate использовать эту PUBLIC схему

<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
    <property name="hibernate.default_schema" value="PUBLIC"/> 
    <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
</properties> 

ИЛИ
просто оставить out default_schema из списка свойств и в любом случае использует PUBLIC.

<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
    <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
</properties> 
+0

Молодцы, я этого не знал. – Magnilex

+1

Что делать, если в встроенной hsqldb есть две схемы? –

3

Этот код можно использовать в классе базового тестирования и вызывать его с помощью аннотации @BeforeClass (для Junit). Я делаю это так.

EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
    builder = builder.setType(EmbeddedDatabaseType.HSQL).addScript(
      "createSchema.sql"); 
    builder.setName("MyDatabase"); 
    EmbeddedDatabase db = builder.build(); 

 Смежные вопросы

  • Нет связанных вопросов^_^