1

次のようなテーブルがあるとします。

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ますか? このマッピングを一般的に行うためのより良い方法はありますか? 私はどんなアドバイスにもオープンです...

4

1 に答える 1

1

hbm2ddlからテーブルを除外する簡単な方法はありません。ただし、Hibernateの副選択を介してビューをマップすることはできます。5.1.1の脚注#20を参照してください。

何かのようなもの:

<class name="com.example.BigPojo" entity-name="bigPojoView"
    <subselect>
      ... your view definition here ...
    </subselect>
    <synchronize table="big_table"/>
    <id name="UUID"/>
    ...
</class>
于 2011-09-29T18:21:50.770 に答える