2011-06-29 4 views
2

JPAバックエンド全体のユニットテストが200回以上あり、それらはすべてhsql db 2.2上でうまく動作します。私はシステムの安定性を検証するために、連続ビルド環境でテストを実行しています。ただし、Oracle 11で実行した場合を除いて、参照整合性の制約がある一部のテストに失敗しました。私のコードにはバグがありましたが、hsqldbでそれらを見つけることができないという事実が私に関係しており、実際に準拠していないときに軽量のメモリ内のjpa準拠のデータベースを持っているという全ポイントに違反しています!HSQL Dbメモリ内ユニットテストの参照整合性を有効にする方法

テストを実行しているときにhsqldbが完全な整合性を考慮するように設定できる設定はありますか。私は彼らがデフォルトで無視されると思う。これらは私のjdbcの設定です:

jdbc.driver=org.hsqldb.jdbcDriver 
jdbc.url=jdbc:hsqldb:mem:SampleProject 
jdbc.username=sa 
jdbc.password= 
+0

DBは、JPA準拠していない、JPAの実装があります。たぶん、JPA実装にはOracle上で問題があるかもしれません(Oracleは、さまざまな分野でJDBC仕様の用語を「拡張」しているため)。 – DataNucleus

答えて

1

あなたが使用することができます。 の "SET DATABASE参照整合性FALSE" と の "SET DATABASE参照整合TRUE" SQL文

0

HSQLDBは​​オフにしない限り、参照整合性が非常に厳しくなっています。 JPAの実装では実際に異なるデータベースに対して異なる戦略をこの領域に使用しています。たとえば、あるデータベースエンジンでは、実装はカスケード削除で外部キーを定義して親オブジェクトを削除できますが、別のエンジンでは親を削除する前にオブジェクトの子を個別に削除できます。

したがって、開発データベースとしてHSQLDBを使用すると、エラーを大幅に見つけるのに役立ちますが、ターゲットデータベースに対して実行することによってソフトウェアを検証する必要があります。あなたはその後、試験後のDatabaseManagerしてデータベースをオープンし、テーブルや制約を確認することができます

jdbc.url=jdbc:hsqldb:file:/home/db/SampleProject;hsqldb.write_delay=false;shutdown=true 

:あなたはこのようなファイルデータベースを使用してテストのいずれかを実行する場合

、特定の質問に戻って定義。 JPAが外部キーを作成している場合、いくつかの挿入と削除を試してみると、HSQLDBによって制約が適用されていることを自分で確認することができます。

関連する問題