7

主キーにシーケンスを使用する必要がある Oracle データベースがあります。シーケンス番号を制御できるため、これはすべてうまく機能します。私の問題は私のテストにあります。Spring を使用して HSQL データベースを作成し、これに対してテストします。このデータベースは、すべてのエンティティを調べて構築されています。Oracle で作業するためのすべてのエンティティには、シーケンス名が指定されています。問題は、HSQL データベースを構築するときにシーケンスが見つからないことです (これは予想通りです)。ログには、この種のメッセージがいっぱいです。

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

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

ログからこのクラフトを削除する方法についてのアイデアはありますか?

ありがとう

4

3 に答える 3

3

これを解決するには、テスト スクリプトの一部としてシーケンスを手動で作成しました。Spring/HSQL の組み合わせでこれをセットアップしたいので、理想的ではありません。私のコードは次のとおりです。

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

シーケンスは、シーケンス名である文字列のリストです。

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

于 2012-08-09T08:12:48.090 に答える
1

代わりにH2 データベースを試してください。Oracle または HSQL のように動作する「互換モード」と呼ばれる機能があります。

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

于 2012-08-09T08:28:01.157 に答える
-2

script を介して独自の in-memory-db を構築できます: how-to-initialize-in-memory-hsqldb-using-script-via-spring

しかし、データとの統合テストにはarquillianを使用することを好みます。

開示 : arquillian では機能しません。

于 2012-08-05T17:25:10.877 に答える