2012-08-02 15 views
7

私は主キーのシーケンスを使用しなければならないOracleデータベースを持っています。これは私がシーケンス番号を制御できるのでうまくいきます。私の問題は私のテストです。 Springを使用して私はHSQLデータベースを作成し、これに対してテストします。このデータベースは、私のすべてのエンティティを見て構築されます。 Oracleでの作業のために、すべてのエンティティにシーケンス名が指定されています。問題は、私がHSQLデータベースを構築するときに、私のテストに合格することが期待できないシーケンスを見つけることができないということですが、ログには多くの厄介なものがあります。ログには、この種のメッセージが埋め込まれています。テストのためのHSQLの欠落しているシーケンス

WARN JDBCExceptionReporter:233 - SQL Error: -5501, SQLState: 42501 
ERROR JDBCExceptionReporter:234 - user lacks privilege or object not found: GENDERS_SEQ 

どのように私はこれらの偽のエラーを削除することができます知っていますか? HSQLにシーケンスを無視させることはできますか?興味深いことに、テストではHSQLデータベースに挿入することができるので、独自の内部プライマリキージェネレータを使用する必要があります。

ログからこの塊を取り除く方法はありますか?

おかげ

答えて

3

私はテストスクリプトの一部として手動でシーケンスを作成することでこれを解決しました。私はむしろSpring/HSQLの組み合わせがこれを設定するので理想的ではありません。私のコードは:

for (String sequence : sequences) { 
    entityManager.createNativeQuery("DROP SEQUENCE " + sequence + " IF EXISTS").executeUpdate(); 
    entityManager.createNativeQuery("CREATE SEQUENCE " + sequence + " as INTEGER").executeUpdate(); 
} 

ここで、sequencesはシーケンス名であるstringのリストです。

これは、各テストクラスの@BeforeClassメソッドです。理想的ではありませんが、問題を解決します

-2

は、スクリプトを経由して、独自のインメモリDBを構築することができます:how-to-initialize-in-memory-hsqldb-using-script-via-spring

しかし、データとの統合テストにarquillianを使用することをお勧めします。

開示:arquillianのために働いていません。

+0

これは、どのようにしてDBのシーケンスを設定するのに役立ちますか?多分私はここに何かを見逃しています。もし私が申し訳ありません – RNJ

1

代わりにH2 databaseを試してみてください。オラクルまたはHSQLのように動作する「Compatibility Modes」という機能があります。

Oracleモードを選択すると、本番環境で使用するのと同じスクリプト(またはHibernate設定)でデータベースを初期化できるはずです。

+0

ありがとうアーロン、私は昼食時にこれを見てみましょう – RNJ

関連する問題