次のようなテーブルがあるとします。
CREATE TABLE big_table (UUID varchar(32) not null, ... );
HQL または Criteria クエリとして表現できないテーブルのクエリがあります。次のように、クエリを Oracle のビューとして設定しようとしています。
CREATE VIEW big_table_view AS SELECT bt.* FROM big_table bt
LEFT OUTER JOIN ...
-- (multicolumn subselect over big_table for some historical stuff)
WHERE ...
テーブルとビューの両方に同じ Java クラスをマップしようとしています。両方に対して同じ Criteria クエリを実行できるため、これは非常にクールです。
私の問題は、私の HSQLDB テスト コードを混乱させない HBM マッピング ファイルを思いつかないことです。私のテスト セットアップは、 Hibernate がテストのためにその場で HSQLDB スキーマを作成するようにhibernate.hbm2ddl.auto
設定された典型的な Maven/Spring テスト セットアップです。create-drop
現在、私のマッピング ファイルは次のようになっています。
<hibernate-mapping>
<class name="com.example.BigPojo" entity-name="bigPojo"
table="big_table">
&commonPropertiesEntity;
</class>
<class name="com.example.BigPojo" entity-name="bigPojoView"
table="big_table_view">
&commonPropertiesEntity;
</class>
</hibernate-mapping>
...テストを実行すると、HSLQDBがbig_table_view
すべて同じ外部キー制約、インデックスなどで呼び出されるテーブルを作成しようとしているため、テストがあちこちで爆発します。このようなdatabase-object
要素:
<database-object>
<create>
DROP TABLE big_table_view CASCADE;
CREATE VIEW big_table_view...
</create>
<drop>
DROP VIEW big_table_view IF EXISTS;
</drop>
<dialect-scope name="org.hibernate.dialect.HSQLDialect" />
</database-object>
...しかし、まだ何かが壊れており、私はまだそれを理解しようとしている. bigPojoView
からエンティティを除外するように Hibernate に指示する方法はありhbm2ddl
ますか? このマッピングを一般的に行うためのより良い方法はありますか? 私はどんなアドバイスにもオープンです...