2013-08-20 37 views
8

Tôi hiện đang sử dụng các thiết lập sau đây để tạo ra một lược đồ trong một cơ sở dữ liệu nhúng trước khi chạy thử nghiệm của tôi chống lại nóCách tốt nhất để tạo lược đồ trong cơ sở dữ liệu nhúng HSQL

Trong bối cảnh ứng dụng của tôi

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

createSchema sql

create schema ST_TEST AUTHORIZATION DBA; 

tính ngủ đông

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

Câu hỏi của tôi là đây là cách tốt nhất để làm điều này. Hoặc tôi có thể sử dụng tên lược đồ khác trong thuộc tính của mình không? hoặc đặt tên lược đồ trong phần tử jdbc: embedded-database

Trả lời

11

Theo mặc định HSQL tạo một giản đồ có tên PUBLIC. source: HSQL documentation

Thấy như tên schema không bao giờ được nhìn thấy trong các bài kiểm tra (tên truy vấn/tổ chức quản lý để thực hiện các tương tác), bạn có thể thay đổi các thuộc tính hibernate để sử dụng schema CÔNG này

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

HOẶC
chỉ để lại ra default_schema từ danh sách thuộc tính và nó sử dụng PUBLIC anyway

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

Thực hiện tốt, tôi không biết điều đó. – Magnilex

+1

điều gì sẽ xảy ra nếu có hai lược đồ trong hsqldb được nhúng? –

3

Bạn có thể sử dụng mã này trong lớp Base Testing và gọi nó bằng chú thích @BeforeClass (cho Junit). Tôi làm như thế này

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