2011-01-28 14 views
2

私はSQL Serverデータベースを利用するアプリケーションのテストに取り組んでいます。テスト目的のために、私はHSQLのようなインメモリデータベースを利用できるようにしたいと思っています。私は実際に私のテストを実行しているが、私はまだ傑出した1つの痛みポイントがある - 私は私のHSQLデータベースを構築するために使用できるSQLスクリプトを生成するのは難しい時があります。このシステムがまだ開発中であるため、データベースの変更が行われる可能性があります。そのため、SQLスクリプトを手動で更新するためにすべての時間を費やしたくありません。SQL Serverデータベースを生成するための有効なSQLスクリプトの作成

SQL Server Management Studioでは、そのデータベースを構築するスクリプトを生成できます。しかし、このスクリプトには、SQL Server固有の「もの」がたくさん含まれています。このように、私はそのスクリプトをHSQLに取り込んで実行することはできません。代わりに、私はHSQLで動作しないものを裂くために多くの時間を費やす必要があります。

同僚は、PowerBuilderを使ってスクリプトを生成することを提案しました。生成されたスクリプトはいくらか洗練されていましたが、HSQLでは "そのまま"実行されませんでした。

SQL Serverデータベースを指し、HSQLでまったく同じデータベースを構築するスクリプトを生成するために使用できる方法(ツール、プロセスなど)を提案する人はいますか?

ありがとうございます!

+1

ODBC経由でHSQLに接続できると仮定すると、[SQL Server Linked Serverインスタンス](http://msdn.microsoft.com/en-us/library/aa213778%28SQL.80%29.aspx)を作成できます。テーブルとデータをHSQLにダンプします。既存のデータベース/スキーマに基づいてスクリプトを生成するためのHSQLツールが必要です。 –

答えて

2

であると仮定します。Hibernateを使用していると仮定すると、sessionFactoryが作成されたときにテーブルを作成するようにHibernateを構成できます。あなたのHBMファイルが作成され、その後、(たとえば、あなたがHBMファイルに特定の制約または列を省略)あなたの物理的なSQL Serverデータベースとのマッチングの設定を持っていない場合

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value>...hbm file...</value> 
      ... 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      ... 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

このアプローチの唯一の短所がありますHSQLのテーブルは異なってくるでしょう。

0

クロスエンジンのデータベース移行用のツールがあります。このジョブを実行できるツールの1つがhttp://liquibase.org/

2

limcが与えた答えのフォローアップと同じように、ここで私ができることがありました。私は春を使用し、私は私の春のデータ設定ファイルを取得し、これにそれを回すことができた休止してい

:代わりにそれと

<bean id="sessionFactory" name="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="mappingResources"> 
    <list> 
    ...hbm files... 
    </list> 
</property> 
<property name="hibernateProperties"> 
<props> 
    <prop key="hibernate.dialect">${db.dialect}</prop> 
    <prop key="hibernate.show_sql">false</prop> 
    <prop key="hibernate.format_sql">true</prop> 
    <prop key="hibernate.use_sql_comments">false</prop> 
    <prop key="hibernate.hbm2ddl.auto">${ddl.create}</prop> 
</props> 
</property> 
</bean> 

を、私は埋めるためにpropertyConfigurer構成することができましたプレースホルダは次のようになります。

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd"> 

    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <value>classpath:test-messages.properties</value> 
     </property> 
    </bean> 

</beans> 

私のテスト用にもう1つ、私の製造コード用にもう1つあります。上図の1は、このようになりますように、私のテストバージョンと参照ファイルtest-messages.propertiesです:

db.dialect=org.hibernate.dialect.HSQLDialect 
ddl.create=create 

私はプレースホルダを利用することにより、事実上すべての私の生産設定ファイルのを再利用することができますので、これは実際には非常にうまく動作しますpropertyConfigurerコンストラクトテスト環境に必要な余分なファイルは、propertyConfigurer設定ファイルと、それが指すプロパティファイルだけです。

ありがとうございます、limc!

さて、私はlimcが言及した問題を見ています。このシステムは、本番環境のSQL Serverデータベースに接続するために配備され、hbm2ddlで作成されることはありません。私のHBMファイルにエラーがあると、私のテストはうまくいくかもしれませんが、私はまだ生産に失敗するかもしれません。

一方で、私はそれについて非常に不満ですが、もう一方では、完全に自己完結型の方法でDBに対してテストケースを実際に実行できます。このソリューションでは、誰かがこのプロジェクトをソース管理からチェックし、DB設定を一切行うことなくテストケースをすぐに実行できます。私もそれが好き。残念ながら、私はまだ両方を持つ本当に素晴らしい方法を見つけていません。

+0

+1すべての補完物について+1。 :) – limc

関連する問題