2013-08-20 15 views
8

Attualmente sto usando la seguente configurazione per creare uno schema in un database incorporato prima di eseguire le mie prove contro di essamodo migliore per creare schema in database integrato HSQL

Nel mio contesto di applicazione

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

createSchema sql

create schema ST_TEST AUTHORIZATION DBA; 

proprietà di 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> 

La mia domanda è questo è il modo migliore per farlo. Oppure posso usare un nome di schema diverso nelle mie proprietà? oppure impostare il nome dello schema nell'elemento jdbc: embedded-database

risposta

11

Per impostazione predefinita HSQL crea uno schema denominato PUBLIC. source: HSQL documentation

Visto che il nome dello schema non si vede mai nelle prove (query denominate/entità responsabile di fare le interazioni) è possibile modificare le proprietà di Hibernate per utilizzare questo schema pubblico

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

O
basta lasciare out the default_schema dall'elenco delle proprietà e utilizza PUBLIC in ogni caso

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

Ben fatto, non lo sapevo. – Magnilex

+1

cosa succede se ci sono due schemi in hsqldb incorporato? –

3

È possibile utilizzare questo codice nella classe Base Testing e chiamarlo utilizzando l'annotazione @BeforeClass (per Junit). Lo faccio così.

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