0

テーブルに事前構成されたデータを持つ読み取り専用の「カタログ」エンティティがあります。「BookCatalog」は、「Catalog」テーブルと多対1の関係を持つ別のエンティティです。

現在、私の設定ファイルは次のとおりです。

<!--Catalog -->
<class name="xxxx.Catalog" table="CATALOG" mutable="false">
   ....
   ....
   <property name="a" type="string">
      <column name="A" />
   </property>
   <property name="b" type="string">
      <column name="B" />
   </property>
</class>

<!-- Book Catalog -->
<class name="xxxx.BookCatalog" table="BOOK_CATALOG">
    ....
    ....
    <many-to-one name="base_catalog" class="xxxx.Catalog" fetch="select">
        <column name="BASE_CATALOG_ID" length="36" />
    </many-to-one>

    <property name="c" type="string">
      <column name="C" />
   </property>
</class>

現在、読み取り専用プロパティaおよびbにアクセスする場合は、「base_catalog」フィールドからアクセスする必要があります。

BookCatalogをCatalogのサブクラスとして作成し、「CATALOG」読み取り専用テーブルからプロパティaとbをマップすることを好みます。

CATALOGテーブルのすべてのフィールドに「数式」を使用できることはわかっていますが、フィールドがもっとたくさんあるため、効率的ではありません。

関連するエンティティの列を関連するエンティティフィールドにマップするHibernateの他の方法はありますか?

また

この問題を解決するためのより良いデータベース設計はありますか?

4

1 に答える 1

0

私はあなたが以下のように使うことができると信じて<component>います:

<class name="xxxx.BookCatalog" table="BOOK_CATALOG" mutable="false">
  <property name="c" type="string">
    <column name="C" />
  </property>
  <component name = "xxxx.Catalog">
    <property name="a" type="string">
      <column name="A" />
    </property>
    <property name="b" type="string">
      <column name="B" />
    </property>
 </component>
</class>
于 2012-10-08T04:26:35.753 に答える