4

複数のカタログ/スキーマを照会する Hibernate アプリケーションのテストに問題があります。

本番データベースは Sybase であり、デフォルトのカタログ/スキーマにマップされたエンティティに加えて、以下のようにマップされた 2 つのエンティティがあります。したがって、合計で 3 つのカタログがあります。

@Table(catalog = "corp_ref_db", schema = "dbo", name = "WORKFORCE_V2")
public class EmployeeRecord implements Serializable {
}

@Table(catalog = "reference", schema = "dbo", name="cntry")
public class Country implements Serializable {
}

これはすべて問題なくアプリケーションで機能します。ただし、単体テストを行うときの私の通常の戦略は、Hibernate の ddl フラグを auto に設定して HSQL を使用し、dbunit にテーブルを設定させることです。

テーブルがすべて同じスキーマにある場合、これはすべて正常に機能します。

ただし、これらの追加のテーブルを追加したため、HSQL は 1 つのカタログしかサポートしないため、DDL が実行されないため、テストは中断されます。

create table corp_ref_db.dbo.WORKFORCE_V2
user lacks privilege or object not found: CORP_REF_DB

カタログが 2 つしかない場合は、HSQL データベースのデフォルトのカタログとスキーマを明示的に定義されたものに変更することで、これを回避できると思います。

これが機能する可能性のある他のメモリ内データベースはありますか、またはテストを HSQL で実行するための戦略はありますか。

デフォルトのカタログとスキーマを指定する orm.xml ファイルを提供することを考えていましたが (注釈を上書きし、定義済みのすべてのテーブルをデフォルトのカタログ/スキーマで作成します)、これらのオーバーライドは DDL の実行時に観察されないようです。上記と同じエラーが発生します。

基本的に、既存のテストを実行し、マッピングで定義されているように何らかの方法でテーブルを作成するか、エンティティレベルでカタログ/スキーマ定義をオーバーライドしたいと考えています。

どちらの結果を達成する方法も考えられません。何か案は?

4

2 に答える 2

0

H2はカタログをサポートしていると思います。私自身は使用していませんが、情報スキーマにCATALOGSテーブルがあります。

于 2012-04-25T14:39:28.810 に答える
0

IGNORE_CATALOGSプロパティとバージョン 1.4.200を介して、H2 でこのようなことを達成することができました。

ただし、ドキュメントの URL の例はうまくいかないようだったので、schema.xml にステートメントを追加しました。 SET IGNORE_CATALOGS = true;

于 2021-10-12T12:30:02.103 に答える